【问题标题】:Converting a big endian array to an Int64将大端数组转换为 Int64
【发布时间】:2012-04-22 23:16:11
【问题描述】:

我正在使用 System.IO.BinaryReader 从序列化文件中读取数据。该文件是大端。所以我从流中读取 Int64 (long) 的操作是从中读取 8 个字节。我需要做的就是将这 8 个字节的 big endian 转换为 little endian long 表示。

我不能使用 System.BitConverter,因为它将使用 Mono 编译以在 Linux 上使用,可以在大端和 Visual Studio for Windows 上运行,它可以在小端上运行。

【问题讨论】:

  • 那是什么? Mono 也实现了System.BitConverter——当然。
  • 我读到 here 说“BitConverter.ToInt64 应该尊重你的底层机器的字节顺序。”
  • 长值 = Convert.ToInt64(binaryReader.ReadBytes(8).Reverse()); Skeet 使用 big-endian 做了一些事情,请查看他的博客。
  • Convert.ToInt* 不采用字节数组

标签: c# .net mono bitconverter


【解决方案1】:

您可以使用System.Net.IPAddress.NetworkToHostOrderSystem.Net.IPAddress.HostToNetworkOrder

例如, System.Net.IPAddress.HostToNetworkOrder(0x0123456789abcdefl) 将返回 efcdab8967452301

【讨论】:

【解决方案2】:

如果您最终还是要使用 Mono,可以使用 DataConvert

在 Windows 上也可以正常工作。我在我的一个项目中使用它。

【讨论】:

  • 即使在常规的 .NET 上,我也会说。 DataConvert 的类似 Python/Perl 的打包/解包函数使用起来很愉快。
【解决方案3】:

John Skeet 的 miscutil 库实现了 BigEndianBitConverter。

【讨论】:

  • 我打开了他的库,发现他在 GenericMath 中使用了Operator<T>。从来不知道这个......我可以多次使用它。很酷!
猜你喜欢
  • 2015-05-27
  • 2019-11-27
  • 2012-04-30
  • 1970-01-01
  • 2015-06-09
  • 2022-01-05
  • 2010-12-13
  • 1970-01-01
相关资源
最近更新 更多