编程语言中的字节序

n53*_*535 6 .net c# java endianness

嗯,"Endianness"主题对我来说总是有点混乱,但我从来没有遇到任何问题,这些问题要求我甚至考虑我使用的二进制编写器/阅读器的默认行为.我正在c#中写一个PNG解码器.PNG文件格式规范声明所有数字都以大端符号存储(我觉得非常自然).但是,当我注意到.NET的BinaryReader/Writer使用一点endian符号时,我感到非常惊讶.令我更加困惑的是,事实上,java的二进制IO与大端符号一起工作(不是java程序员,所以也许我错了).所以我开始考虑以下问题:

1 - 为什么它们是这样的?我的意思是基类库的默认行为.2 - 为什么在使用.NET的System.IO时无法选择首选符号?

我目前正在使用Jon Skeet的 MiscUtil,它就像一个魅力(感谢,man =)).但是在基类库中看到这个功能会很酷.

Joh*_*ski 10

这是因为代码意味着在最重要的平台上尽可能地运行.C#/ .NET来自Microsoft,主要在x86平台上运行.x86是little-endian,因此将库设为little-endian是有意义的.Java由Sun制作,Sun SPARC是big-endian,因此Java标准是big-endian.

  • Java被设计为独立于平台,这就是为什么它们采用更自然的顺序..NET继承其平台独立性,主要用于规范Windows平台上的各种语言,并带来更新的语言功能,如垃圾收集等.MS/intel世界往往以这种方式近视,因此大多数Windows程序员会读取的文件是小端.小端是/芯片上首选的排序. (2认同)