以两个字节顺序从流中读取有符号和无符号值

问题描述

| 我需要从文件流中读取带符号和无符号的8位,16位和32位值,该文件流可以是小端(big-endian)或大端(big-endian)(它恰好是tiff文件,其开头带有字节顺序指示符)。 我最初通过编写自己的函数来读取值开始,并且能够对无符号值进行读取。例如
Public Function ReadUInt32() As UInt32
    Dim b(4) As Byte
    input.Read(b,4)
    Dim out As UInt32 = CUInt(If(IsBigEndian,b(0),b(3))) << 24
    out += CUInt(If(IsBigEndian,b(1),b(2))) << 16
    out += CUInt(If(IsBigEndian,b(2),b(1))) << 8
    out += CUInt(If(IsBigEndian,b(3),b(0)))
    Return out
End Function
但是后来我开始看签名的价值观,我的大脑崩溃了。 作为替代方案,我找到了IO.BinaryReader,它可以让我直接读取带符号的值,但似乎没有任何方法可以表明数据是大端或小端的。 有解决这个问题的好方法吗?失败了,有人可以告诉我如何将多个字节转换为带符号的值(两个字节顺序)吗?     

解决方法

这并不理想,但是您可以使用System.Net.IPAddress类中HostToNetworkOrder和NetworkToHostOrder方法的各种重载来进行有符号整数字节序转换。     ,您是否看过BitConverter类? http://msdn.microsoft.com/zh-CN/library/system.bitconverter_members(v=VS.80).aspx 一些字节改组和对ToUInt32的调用应该得到您想要的。