C#将int转换为short然后转换为bytes并返回int

时间:2017-04-13 21:50:46

标签: c#

我试图将 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);
}

1 个答案:

答案 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的道具!