如何简化BinaryReader的网络字节序转换?System.IO.BinaryReader以小端格式读取值。我有一个C#应用程序连接到服务器端的专有网络库。正如人们所预料的那样,服务器端以网络字节顺序发送所有内容,但我发现在客户端处理这一点很尴尬,尤其是对于无符号值。UInt32长度=(UInt32)IPAddress.NetworkToHostOrder(reader.ReadInt32());是我能想到的从流中获取正确的无符号值的唯一方法,但这看起来很笨拙和丑陋,我还没有测试它是否只会削减高阶值,所以我可以在BitConverter上玩得开心。有什么办法可以避免在整个事情上写一个包装器来避免每次读取时出现这些丑陋的转换?似乎应该有一个endian-ness选项供读者使这样的事情变得更容易,但我没有遇到任何问题。没有内置转换器。这是我的包装器(如您所见,我只实现了我需要的功能,但结构很容易根据您的喜好更改)://////读取大端文件的实用程序///publicclassBigEndianReader{publicBigEndianReader(BinaryReaderbaseReader){mBaseReader=baseReader;}publicshortReadInt16(){returnBitConverter.ToInt16(ReadBigEndianBytes(2),0);}publicushortReadUInt16(){returnBitConverter.ToUInt2)(ReadyBigs(0);}publicuintReadUInt32(){returnBitConverter.ToUInt32(ReadBigEndianBytes(4),0);}publicbyte[]ReadBigEndianBytes(intcount){字节[]bytes=newbyte[count];for(inti=count-1;i>=0;i--)bytes[i]=mBaseReader.ReadByte();返回字节;}publicbyte[]ReadBytes(intcount){returnmBaseReader.ReadBytes(count);}publicvoidClose(){mBaseReader.Close();}publicStreamBaseStream{get{returnmBaseReader.BaseStream;}}privateBinaryReadermBaseReader;}基本上,ReadBigEndianBytes完成了繁重的工作并将其传递给BitConverter。如果您正在读取大量字节,则肯定会出现问题,因为这将导致大量内存分配。我构建了一个自定义BinaryReader来处理所有这些。它作为我的Nextem库的一部分提供。它还有一种非常简单的方法来定义二进制结构,我认为这会对您有所帮助-查看示例。注意:它目前仅在SVN中可用,但非常稳定。如果您有任何问题,请发送电子邮件至cody_dot_brocious_at_gmail_dot_com。以上是C#学习教程:如何简化BinaryReader的网络字节序转换?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
