Оказывается, ещё начиная с .NET Standard в сборку System.Memory
в нейсмпейс System.Buffers.Binary
завезли класс BinaryPrimitives
— расширенный аналог
System.BitConverter
. У BitConverter
было два основных недостатка:
BitConverter
всегда конвертировал данные в соответствии c Endianess текущего процессора. Например, если приложение запущено на процессоре Intel x86 (amd64)-совместимой архитектуры, то порядок байт будеn Little-endian.BitConverter
не умеет работать соSpan<byte>
.
Лично мне нужна была поддержка Big-endian и Span<T>
и приходилось писать свои конверторы. Теперь можно пользоваться методами из BinaryPrimitives
.
Например:
using System.Buffers.Binary; public static ushort GetYear(ReadOnlySpan<byte> dateTime) { return BinaryPrimitives.ReadUInt16BigEndian(dateTime.Slice(2)); }