有关ReadUnt32的BinaryReader的Microsoft文档(例如)声明:使用little-endian编码从当前流中读取4字节无符号整数.但是,即使在大端系统上,这总是正确的吗?
该文档肯定暗示其他平台上的实现者应该使用little-endian编码,Mono似乎尊重这一点:
public virtual uint ReadUInt32() {
FillBuffer(4);
return((uint) (m_buffer[0] |
(m_buffer[1] << 8) |
(m_buffer[2] << 16) |
(m_buffer[3] << 24)));
}
Run Code Online (Sandbox Code Playgroud)
直接从文档为BinaryReader.ReadUInt32:
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;
}
Run Code Online (Sandbox Code Playgroud)
显而易见它忽略了字节序.
现在,将来自小端变化到大端机器是BitConverter.ToUInt32.输出将尊重机器的底层字节序.
| 归档时间: |
|
| 查看次数: |
4212 次 |
| 最近记录: |