2013-04-28 155 views
0

所以基本上这就是我所拥有的。用户给出一个整数,我将它转换成3个字节。C#:将24位整数转换为三字节数组?

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

只是说你将一个字节作为一个不需要的字节来转换。问题背后还有什么问题? – Nomad101 2013-04-28 23:10:33

+0

经过一些更多的测试后,我的问题主要是当大于255的整数被转换为(字节)时发生了什么? 例如,当167123被转换为(字节)时,它被更改为211. – Binarynova 2013-04-28 23:25:21

回答

2

这个原因起作用的原因是因为将int值赋值给该字节会截断该值。这可能就是为什么你的数学不算正确 - 你没有截断。

基本上你正在做的分裂是偏移。您的代码是一样的:

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

为了让您手动数学的工作,做数学题,然后将其转换为二进制,并砍掉任何最后8位数以上。这是您分配给字节数组的数字。

一个例子:

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

这二百五十六分之十六万七千一百二十三= 652。在二元的,这是001010001100.现在,截断一个字节(8个比特)的大小以上的一切,你有10001100,其是十进制的140。这是分配给这个字节数组索引的东西。

+0

完美!谢谢!这正是我需要知道的! – Binarynova 2013-04-28 23:29:46