1

所以基本上这就是我所拥有的。用户给出一个整数,我将其转换为 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 转换为“字节”时,它在第三个字节中写入了什么?

4

2 回答 2

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。这是分配给此字节数组索引的内容。

于 2013-04-28T23:20:50.013 回答
1

尝试改用此方法:BitConvet.GetBytes(int)。更多关于这个问题的信息也可以在这个问题中找到。

于 2013-04-28T23:17:54.467 回答