System.Buffers.Binary.BinaryPrimitives exposes many APIs but there are few notable ones missing for core number types. We should extend the type to ensure that it supports the basic operations for all basic number types.
namespaceSystem.Buffers.Binary;publicstaticpartialclassBinaryPrimitives{// Read*BigEndian and Read*LittleEndianpublicstaticnintReadIntPtrBigEndian(ReadOnlySpan<byte>source);publicstaticnintReadIntPtrLittleEndian(ReadOnlySpan<byte>source);publicstaticInt128ReadInt128BigEndian(ReadOnlySpan<byte>source);publicstaticInt128ReadInt128LittleEndian(ReadOnlySpan<byte>source);publicstaticnuintReadUIntPtrBigEndian(ReadOnlySpan<byte>source);publicstaticnuintReadUIntPtrLittleEndian(ReadOnlySpan<byte>source);publicstaticUInt128ReadUInt128BigEndian(ReadOnlySpan<byte>source);publicstaticUInt128ReadUInt128LittleEndian(ReadOnlySpan<byte>source);// ReverseEndiannesspublicstaticnintReverseEndianness(nintvalue);publicstaticInt128ReverseEndianness(Int128value);publicstaticnuintReverseEndianness(nuintvalue);publicstaticUInt128ReverseEndianness(UInt128value);// TryRead*BigEndian and TryRead*LittleEndianpublicstaticboolTryReadIntPtrBigEndian(ReadOnlySpan<byte>source,outnintvalue);publicstaticboolTryReadIntPtrLittleEndian(ReadOnlySpan<byte>source,outnintvalue);publicstaticboolTryReadInt128BigEndian(ReadOnlySpan<byte>source,outInt128value);publicstaticboolTryReadInt128LittleEndian(ReadOnlySpan<byte>source,outInt128value);publicstaticboolTryReadUIntPtrBigEndian(ReadOnlySpan<byte>source,outnuintvalue);publicstaticboolTryReadUIntPtrLittleEndian(ReadOnlySpan<byte>source,outnuintvalue);publicstaticboolTryReadUInt128BigEndian(ReadOnlySpan<byte>source,outUInt128value);publicstaticboolTryReadUInt128LittleEndian(ReadOnlySpan<byte>source,outUInt128value);// TryWrite*BigEndian and TryWrite*LittleEndianpublicstaticboolTryWriteIntPtrBigEndian(ReadOnlySpan<byte>destination,nintvalue);publicstaticboolTryWriteIntPtrLittleEndian(ReadOnlySpan<byte>destination,nintvalue);publicstaticboolTryWriteInt128BigEndian(ReadOnlySpan<byte>destination,Int128value);publicstaticboolTryWriteInt128LittleEndian(ReadOnlySpan<byte>destination,Int128value);publicstaticboolTryWriteUIntPtrBigEndian(ReadOnlySpan<byte>destination,nuintvalue);publicstaticboolTryWriteUIntPtrLittleEndian(ReadOnlySpan<byte>destination,nuintvalue);publicstaticboolTryWriteUInt128BigEndian(ReadOnlySpan<byte>destination,UInt128value);publicstaticboolTryWriteUInt128LittleEndian(ReadOnlySpan<byte>destination,UInt128value);// Write*BigEndian and Write*LittleEndianpublicstaticvoidWriteIntPtrBigEndian(ReadOnlySpan<byte>destination,nintvalue);publicstaticvoidWriteIntPtrLittleEndian(ReadOnlySpan<byte>destination,nintvalue);publicstaticvoidWriteInt128BigEndian(ReadOnlySpan<byte>destination,Int128value);publicstaticvoidWriteInt128LittleEndian(ReadOnlySpan<byte>destination,Int128value);publicstaticvoidWriteUIntPtrBigEndian(ReadOnlySpan<byte>destination,nuintvalue);publicstaticvoidWriteUIntPtrLittleEndian(ReadOnlySpan<byte>destination,nuintvalue);publicstaticvoidWriteUInt128BigEndian(ReadOnlySpan<byte>destination,UInt128value);publicstaticvoidWriteUInt128LittleEndian(ReadOnlySpan<byte>destination,UInt128value);}Additional Notes
Also missing are some APIs around char, Half, float, and double. However, there are concerns around char not being a "core" numeric type and around possible normalization issues for the various floating-point types, so they aren't included.
System.Buffers.Binary.BinaryPrimitivesexposes many APIs but there are few notable ones missing for core number types. We should extend the type to ensure that it supports the basic operations for all basic number types.Additional Notes
Also missing are some APIs around
char,Half,float, anddouble. However, there are concerns aroundcharnot being a "core" numeric type and around possible normalization issues for the various floating-point types, so they aren't included.