我试图将 int 转换为简短然后转换为 byte [] ,但我的错误值,我传入1并获得256我做错了什么? 这是代码:
//passing 1
int i = 1;
byte[] shortBytes = ShortAsByte((short)i);
//ii is 256
short ii = Connection.BytesToShort (shortBytes [0], shortBytes [1]);
public static byte[] ShortAsByte(short shortValue){
byte[] intBytes = BitConverter.GetBytes(shortValue);
if (BitConverter.IsLittleEndian) Array.Reverse(intBytes);
return intBytes;
}
public static short BytesToShort(byte byte1, byte byte2)
{
return (short)((byte2 << 8) + byte1);
}
答案 0 :(得分:1)
方法ShortAsByte
在索引0处具有最高有效位,在索引1处具有最低有效位,因此BytesToShort
方法正在移位1而不是0.这意味着BytesToShort
返回256(1 <&lt; 8 + 0 = 256)而不是1(0 <&lt; 8 + 1 = 1)。
在return语句中交换字节变量以获得正确的结果。
public static short BytesToShort(byte byte1, byte byte2)
{
return (short)((byte1 << 8) + byte2);
}
另外,考虑到endian-ness的道具!