2014-05-24 116 views
0

我有数字1和4字节代表我的价值(在这是-1),我想插入这个数字到我的字节,所以它需要是00 00 00 01这就是我已经尝试和结果是10 00 00 00如何插入数字到4字节

array[Index + 2] = (byte)(num & 0xFF); 
array[Index + 3] = (byte)((num>> 8) & 0xFF); 
array[Index + 4] = (byte)((num>> 16) & 0xFF); 
array[Index + 5] = (byte)((num>> 24) & 0xFF); 

我会高兴一些帮助

回答

1

这是你想要的。

array[Index + 5] = (byte)(num & 0xFF); 
array[Index + 4] = (byte)((num>> 8) & 0xFF); 
array[Index + 3] = (byte)((num>> 16) & 0xFF); 
array[Index + 2] = (byte)((num>> 24) & 0xFF); 

num & 0xFF它将使0的所有位,除了第一最右边8.

1

使用位转换器:

byte[] numberToByteArray = BitConverter.GetBytes(1); 

之一将是在是在numberToByteArray的至少显著细胞[0] ,即:00 00 00 01

如果你想要的值是在numberToByteArray [3],而不是 - 反结果:

byte[] reversedResult = numberToByteArray.Reverse().ToArray(); 

扭转它是这样的结果后:01 00 00 00

+0

字节顺序呢? –

+0

我编辑了一下回复以显示字节顺序。 – PiotrWolkowski

+2

这也是不便携的。 'BitConverter'根据执行的CPU的字节顺序返回不同的值。要跨平台工作,请检查“BitConverter.IsLittleEndian”。 – Mitch

0

你的例子似乎混合,通常情况下,要表示小数点1,您应该有00 00 00 01(大端),01 00 00 00(小端)或00 01 00 00(中端)之一。你所看到的似乎与中端,但在字节级。

你将不得不自己翻转半字节:

var Index = 0; 
var array = new byte[7]; 
var num = 0x87654321; 

var t = num; 
array[Index + 2] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 3] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 4] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 5] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); 

Console.Writeline("{0:X2} {1:X2} {2:X2} {3:X2}", array[2], array[3], array[4], array[5]); 
// prints: 12 34 56 78 

编辑:,如果你正在寻找它是大端,然后哈姆雷特Hakobyan的回答是适当的。