2014-05-24 115 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的回答是適當的。