用于ReadUnt32的BinaryReader的Microsoft文档(例如)声明:使用little-endian编码从当前流中读取4字节无符号整数。但是,即使在大端系统上,这总是正确的吗?
答案 0 :(得分:7)
文档肯定暗示其他平台上的实现者应该使用little-endian编码,Mono seems to respect this:
public virtual uint ReadUInt32() {
FillBuffer(4);
return((uint) (m_buffer[0] |
(m_buffer[1] << 8) |
(m_buffer[2] << 16) |
(m_buffer[3] << 24)));
}
答案 1 :(得分:5)
直接来自BinaryReader.ReadUInt32
的{{3}}:
BinaryReader
以little-endian格式读取此数据类型。
请注意,没有关于机器底层字节序的限定条件。如果底层系统是大端(例如XBox 360)并不重要,BinaryReader
将以小端读取。
事实上,如果撕开你会看到的来源:
public virtual long ReadInt64() {
this.FillBuffer(4);
uint num = (uint) (((this.m_buffer[0] |
(this.m_buffer[1] << 0x08)) |
(this.m_buffer[2] << 0x10)) |
(this.m_buffer[3] << 0x18));
return num;
}
显示非常清楚它忽略了字节序。
现在,将从小端到大端机器的变化是BitConverter.ToUInt32
。输出将尊重机器的底层字节序。