.Net Core 中的大端处理
Big-Endian handling in .Net Core
是否有支持 .Net Core 的 BitConverter
或其他 class,我可以将整数和其他值读取为具有 Big Endian 编码?
感觉不太好需要写一套辅助方法:
int GetBigEndianIntegerFromByteArray(byte[] data, int startIndex) {
return (data[startIndex] << 24)
| (data[startIndex + 1] << 16)
| (data[startIndex + 2] << 8)
| data[startIndex + 3];
}
BitConverter
class with a ToInt32()
method exists in the System.Runtime.Extensions 包。
using System;
using System.Linq;
int GetBigEndianIntegerFromByteArray(byte[] data, int startIndex)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt32(data.Skip(startIndex).Take(sizeof(int)).Reverse().ToArray(), 0);
}
return BitConverter.ToInt32(data, startIndex);
}
自 .NET Core 2.1 起,在静态 class System.Buffers.Binary.BinaryPrimitives
中有一个统一的 API
它包含用于 ReadOnlySpan 的 API 和用于原始类型的直接反字节序 (short/ushort,int/uint,long/ulong)
private void GetBigEndianIntegerFromByteArray(ReadOnlySpan<byte> span,int offset)
{
return BinaryPrimitives.ReadInt32BigEndian(span.Slice(offset));
}
System.Buffers.Binary.BinaryPrimitives class 是 .NET Core 2.1 的一部分,不需要 NuGet 包
此 class 还包含 Try... 方法
是否有支持 .Net Core 的 BitConverter
或其他 class,我可以将整数和其他值读取为具有 Big Endian 编码?
感觉不太好需要写一套辅助方法:
int GetBigEndianIntegerFromByteArray(byte[] data, int startIndex) {
return (data[startIndex] << 24)
| (data[startIndex + 1] << 16)
| (data[startIndex + 2] << 8)
| data[startIndex + 3];
}
BitConverter
class with a ToInt32()
method exists in the System.Runtime.Extensions 包。
using System;
using System.Linq;
int GetBigEndianIntegerFromByteArray(byte[] data, int startIndex)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt32(data.Skip(startIndex).Take(sizeof(int)).Reverse().ToArray(), 0);
}
return BitConverter.ToInt32(data, startIndex);
}
自 .NET Core 2.1 起,在静态 class System.Buffers.Binary.BinaryPrimitives
中有一个统一的 API它包含用于 ReadOnlySpan 的 API 和用于原始类型的直接反字节序 (short/ushort,int/uint,long/ulong)
private void GetBigEndianIntegerFromByteArray(ReadOnlySpan<byte> span,int offset)
{
return BinaryPrimitives.ReadInt32BigEndian(span.Slice(offset));
}
System.Buffers.Binary.BinaryPrimitives class 是 .NET Core 2.1 的一部分,不需要 NuGet 包
此 class 还包含 Try... 方法