我有1和4个字节代表我的值(在这是 - 1),我想将这个数字插入我的字节,所以它需要是00 00 00 01
这就是我尝试过的结果是10 00 00 00
:
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);
我很乐意提供帮助
答案 0 :(得分: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
除了第一个最右边的8之外,它将使所有位为0。
答案 1 :(得分:1)
使用位转换器:
byte[] numberToByteArray = BitConverter.GetBytes(1);
其中一个将位于numberToByteArray [0]中最不重要的单元格中,即:00 00 00 01
。
如果你想让值在numberToByteArray [3]中 - 反转结果:
byte[] reversedResult = numberToByteArray.Reverse().ToArray();
反转之后,结果是:01 00 00 00
答案 2 :(得分:0)
您的示例似乎是混合的,通常代表小数1,您将拥有00 00 00 01
(大端),01 00 00 00
(小端)或00 01 00 00
(中间) -endian)。您所拥有的内容似乎与中间端类似,但在字节级别上。
你必须自己翻转小块:
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
编辑:如果您正在寻找它是大端的话,那么哈姆雷特哈博伊恩的答案是恰当的。