将Int32转换为24位有符号整数

时间:2011-02-07 06:13:41

标签: c# integer endianness bitconverter

我需要将Int32值转换为3字节(24位)整数。字节顺序保持不变(很少),但我无法弄清楚如何恰当地移动符号。这些值已经被限制在适当的范围内,我只是无法弄清楚如何将4个字节转换为3.使用C#4.0。这是为了硬件集成,所以我必须有24位值,不能使用32位。

2 个答案:

答案 0 :(得分:2)

找到了这个:http://bytes.com/topic/c-sharp/answers/238589-int-byte

int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

听起来你只需要获得数组的最后3个元素。

编辑:

正如耶利米指出的那样,你需要做一些像

这样的事情
int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);

if (BitConverter.IsLittleEndian) {
    // get the first 3 elements
} else {
    // get the last 3 elements
}

答案 1 :(得分:1)

如果要进行转换,只需删除四字节数字的顶部字节即可。二进制补码表示将正确处理符号。如果要将24位数保留在Int32变量中,可以使用v & 0xFFFFFF来获得低24位。我看到你对字节数组的评论:如果你在数组中有空格,写下数字的所有四个字节,然后发送前三个字节;但这是特定于小端系统的。