Edd*_*Lin 11 c# endianness binarywriter
我在我的代码中使用BinaryWriter,这是我的代码:
static void Main(string[] args)
{
FileInfo file = new FileInfo(@"F:\testfile");
if (file.Exists) file.Delete();
using (BinaryWriter bw = new BinaryWriter(file.Create()))
{
ushort a = 1024;
ushort b = 2048;
bw.Write(a);
bw.Write(b);
bw.Write(a);
bw.Write(b);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
但输出文件的十六进制是:
是不是0x0004 = 4?为什么?
gio*_*gim 12
虽然是1024 0x0400
.当把它存储在文件或内存中时,我们应该使用little endian或big endian表示法来提问吗?
在这种情况下BinaryWriter
,它是小端.这意味着LSB首先出现 - 然后是MSB.因此,它存储为:
LSB | MSB
00 04
Run Code Online (Sandbox Code Playgroud)
您可以阅读有关字节序的更多信息.
作为旁注,它完全按照msdn中的指定写入文件:
备注
BinaryWriter以little endian格式存储此数据类型.
你要求的是"大端格式".你必须重新实现BinaryWriter
这样做.
请注意,BinaryWriter
具有不同的行为BitConverter
.BinaryWriter
是"总是小端",而BitConverter.GetBytes(ushort)
(这是一个完全不同的功能,但有一个"共同"连接:将数字转换为字节)是"本地端"(所以它使用计算机的字节顺序)
注意
GetBytes方法返回的数组中的字节顺序取决于计算机体系结构是little-endian还是big-endian.
最终在英特尔/ AMD PC上,这种差异没有实际意义:英特尔是Little Endian,几乎所有手机都是如此.我知道支持.NET(在特殊版本中)的唯一一个大例外是Xbox360.
归档时间: |
|
查看次数: |
4871 次 |
最近记录: |