我存储数字的字节等效格式,使用尽可能少的字节数。在范围65535到16777215之间,BitConverter给了我一个4字节的数组,但我只想存储3个字节。什么字节顺序BitConverter.IsLittleEndian = false时
对于下面的代码,我的数组[0] 254,[1] 255,[2] 255,[3] 0,所以我可以砍掉字节[3]。这是在Core i7 proc上。在我的生产代码中,在数组复制之前,我正在检查BitConverter.IsLittleEndian以确定我可以砍掉最后一个字节。
int i = 16777214;
byte[] bytesTemp = BitConverter.GetBytes(i);
byte[] value = null;
if (BitConverter.IsLittleEndian)
Array.Copy(bytesTemp, 0, value, 0, 3);
我的问题是 - 我需要用系统的字节序关心自己,还是在CLR只是使用这个LittleEndian格式不管?我没有BigEndian系统(甚至不知道如何得到它)来测试我的字节数组是否以相反的顺序出现。
这取决于计算机体系结构,大多数体系结构都是LittleEndian。但是.Net代码可以在BigEndian架构上运行 - .NET Micro Framework可以运行在big-endian上。 4.1版增加了对big-endian的支持。 – Donal 2014-09-25 09:49:27
我希望你不要这样做,以节省空间。 – Rawling 2014-09-25 09:53:35
如果空间是你关心的 - 你可以考虑像“varint”这样的东西;这需要0-127个字节; 2字节128-16,383; 3个字节16,384至2,097,151; 4个字节,2,097,152至268,435,455;和5个字节为268,435,456到4,294,967,295(假设无符号等) - 并且已经定义了字节顺序(/ cc @Rawling)(实际上,5字节会一直到34,359,738,367 - 如果你确实需要的话) – 2014-09-25 10:01:32