. net核心中的大端处理

本文关键字:处理 核心 net | 更新日期: 2023-09-27 17:49:40

是否有支持。net Core的BitConverter或其他类,我可以读取整数和其他值作为具有大端编码?

我不太喜欢写一组辅助方法:

int GetBigEndianIntegerFromByteArray(byte[] data, int startIndex) {
    return (data[startIndex] << 24)
         | (data[startIndex + 1] << 16)
         | (data[startIndex + 2] << 8)
         | data[startIndex + 3];
}

. net核心中的大端处理

从。net Core 2.1开始,在静态类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类是。net Core 2.1的一部分,不需要NuGet包

这个类也包含Try…方法

在System.Runtime.Extensions包中存在ToInt32()方法的BitConverter

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);
}