Convert byte array to int
我正在尝试在C中进行一些转换,我不确定如何执行此操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private int byteArray2Int(byte[] bytes) { // bytes = new byte[] {0x01, 0x03, 0x04}; // how to convert this byte array to an int? return BitConverter.ToInt32(bytes, 0); // is this correct? // because if I have a bytes = new byte [] {0x32} => I got an exception } private string byteArray2String(byte[] bytes) { return System.Text.ASCIIEncoding.ASCII.GetString(bytes); // but then I got a problem that if a byte is 0x00, it show 0x20 } |
有人能给我一些建议吗?
你的问题是因为你承诺32时只提供了8位。在数组中尝试一个有效的32位数字,如
如果要转换任意长度的数组,可以自己实现:
1 2 3 4 5 6 7 8 9 10 | ulong ConvertLittleEndian(byte[] array) { int pos = 0; ulong result = 0; foreach (byte by in array) { result |= ((ulong)by) << pos; pos += 8; } return result; } |
不清楚问题的第二部分(涉及字符串)应该产生什么,但我想你想要十六进制数字?如前一个问题所述,
1 2 3 4 5 6 7 8 9 | byte[] bytes = { 0, 0, 0, 25 }; // If the system architecture is little-endian (that is, little end first), // reverse the byte array. if (BitConverter.IsLittleEndian) Array.Reverse(bytes); int i = BitConverter.ToInt32(bytes, 0); Console.WriteLine("int: {0}", i); |
这是正确的,但你不见了,那个
完全一样的麻烦你有。别忘了您使用的编码:从编码到编码,您有"每个符号的字节计数不同"
一种快速而简单的方法就是使用buffer.blockcopy将字节复制到整数:
1 2 3 |
这样做的另一个好处是,只需操作偏移量,就可以将许多整数解析为数组。