C# 将大端数组转换为Int64

C# 将大端数组转换为Int64,c#,.net,mono,bitconverter,C#,.net,Mono,Bitconverter,Im使用System.IO.BinaryReader从序列化文件读取数据。该文件是big-endian文件。所以我从流中读取Int64(long)的操作是从流中读取8个字节。我需要做的是将这8个字节的big-endian转换为little-endian-long表示 我不能使用System.BitConverter,因为它将在Linux上使用Mono编译,Linux可以在big-endian上运行,Visual Studio for Windows可以在little-endian上运行。您可以使

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


我不能使用System.BitConverter,因为它将在Linux上使用Mono编译,Linux可以在big-endian上运行,Visual Studio for Windows可以在little-endian上运行。

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

例如,
System.Net.IPAddress.HostToNetworkOrder(0x0123456789abcdefl)
将返回
efcdab8967452301
您可以使用
System.Net.IPAddress.NetworkToHostOrder
System.Net.IPAddress.HostToNetworkOrder

例如,
System.Net.IPAddress.HostToNetworkOrder(0x0123456789abcdefl)
将返回
efcdab8967452301
如果您最终还是要使用Mono,您可以使用


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

如果你最终还是要使用Mono,你可以使用它


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

约翰·斯基特的库实现了一个BigEndianBitConverter。

约翰·斯基特的库实现了一个BigEndianBitConverter。

它是什么?Mono也实现了
System.BitConverter
——当然。我读到“BitConverter.ToInt64应该尊重底层机器的端性。”long value=Convert.ToInt64(binaryReader.ReadBytes(8.Reverse());Skeet对big endian做了些什么,查看他的博客。Convert.ToInt*不接受字节数组是什么?Mono也实现了
System.BitConverter
——当然。我读到“BitConverter.ToInt64应该尊重底层机器的端性。”long value=Convert.ToInt64(binaryReader.ReadBytes(8.Reverse());Skeet对big endian做了些什么,查看他的博客。Convert.ToInt*不接受字节数组。别忘了你现在使用的机器可能是big endian。您可以使用BitConverter.IsLittleEndian进行检查。请不要忘记,您所使用的机器首先可能是big-endian。您可以使用BitConverter.IsLittleEndian进行检查。我会说,即使是在常规的.NET上。DataConvert的类似Python/Perl的pack/unpack函数很好用。我想说,即使是在普通的.NET上。DataConvert的类似Python/Perl的pack/unpack函数很好用。我打开了他的库,发现他在GenericMath中使用了
操作符。我从来不知道这件事。。。我本可以用它很多次的。很酷!我打开他的库,发现他在GenericMath中使用了
操作符。我从来不知道这件事。。。我本可以用它很多次的。很酷!