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