C# 为什么BinaryReader.ReadInt64()会将数据分别读取为上限/下限?

C# 为什么BinaryReader.ReadInt64()会将数据分别读取为上限/下限?,c#,binaryreader,C#,Binaryreader,我对微软的BinaryReader有疑问 从 公共虚拟长读取器64(){ 填充缓冲器(8); uint lo=(uint)(m_缓冲区[0]| m_缓冲区[1]也许是为了可读性。因为写它的人喜欢这样,他们也可能没有40、48、56,而且它也与int32一致。无论如何,没有区别。它不是解析。它只是一点点的旋转。但是如果第一个表单是为32位体系结构编译的,在那里它不能假定访问权限,那么它可能会得到更好的汇编到64位寄存器。正如Damien所写,.NET诞生时,32位机器比64位更常见。这里没有解析和

我对微软的BinaryReader有疑问

公共虚拟长读取器64(){
填充缓冲器(8);

uint lo=(uint)(m_缓冲区[0]| m_缓冲区[1]也许是为了可读性。因为写它的人喜欢这样,他们也可能没有40、48、56,而且它也与int32一致。无论如何,没有区别。它不是解析。它只是一点点的旋转。但是如果第一个表单是为32位体系结构编译的,在那里它不能假定访问权限,那么它可能会得到更好的汇编到64位寄存器。正如Damien所写,.NET诞生时,32位机器比64位更常见。这里没有解析和(单独)读取。只是两个Int32值(从四个字节开始)的组合,这种样式可能是为了明确小/大端。
public virtual long ReadInt64() {
        FillBuffer(8);
        uint lo = (uint)(m_buffer[0] | m_buffer[1] << 8 |
                         m_buffer[2] << 16 | m_buffer[3] << 24);
        uint hi = (uint)(m_buffer[4] | m_buffer[5] << 8 |
                         m_buffer[6] << 16 | m_buffer[7] << 24);
        return (long) ((ulong)hi) << 32 | lo;
}
public virtual long ReadInt64Other() {
        FillBuffer(8);
        return (long)m_buffer[0] | 
               (long)m_buffer[1] << 8 |
               (long)m_buffer[2] << 16 |
               (long)m_buffer[3] << 24 |
               (long)m_buffer[4] << 32 |
               (long)m_buffer[5] << 40 |
               (long)m_buffer[6] << 48 |
               (long)m_buffer[7] << 56;
}