C#:将24位整数转换为三字节数组?

时间:2013-04-28 23:07:59

标签: c# visual-c#-express-2010

所以基本上就是我所拥有的。用户给出一个整数,我将其转换为3个字节。

int number = 167123;

byte[0] = (int)number / 65536;
byte[1] = (int)number / 256;
byte[2] = (int)number;

stream.Position = 0x503;   
stream.WriteByte((byte)byte[2]);
stream.WriteByte((byte)byte[1]);
stream.WriteByte((byte)byte[0]);

(注意:我最后会故意在字节数组中向后循环。)

当我稍后检查该值时,它按预期工作。现在我正在努力查看代码并手动尝试计算,但我得不到正确的答案。我究竟做错了什么?这是怎么回事?什么是Visual C#在将167123转换为“字节”时写入第三个字节?

2 个答案:

答案 0 :(得分:2)

这样做的原因是因为将int值赋给该字节会截断该值。这可能就是为什么你的数学没有成功 - 你没有截断。

基本上你通过划分做的是比特移位。您的代码与此相同:

byte[0] = (int)number >> 16;
byte[1] = (int)number >> 8;
byte[2] = (int)number;

要使手动数学运算,请进行数学运算,然后将其转换为二进制数,并切掉最后8位数之上的任何数字。这是你分配给字节数组的数字。

一个例子:

byte[1] = (int)number / 256;

这是167123/256 = 652.在二进制中,这是001010001100.现在,截断一个字节大小(8位)以上的所有内容,并且你有10001100,即十进制的140。这是分配给此字节数组索引的内容。

答案 1 :(得分:1)

请尝试使用此方法:BitConvet.GetBytes(int)。有关此问题的更多信息,请参见this question