Monors Note

Pythonとそれ以外いろいろ

C#でエンディアン指定して符号なし変数に変換する。

Webの通信なのでBinaryデータを扱って、通信先でデコードする場合エンディアンを指定する必要があります。 Webでは基本的にBigEndian形式で変換されたデータを使用して、通信が行われます。一方PC上の内部構造はLittleEndianが使用されています。 C#でリトルエンディアンをビッグエンディアンに変換する - PG日誌

下記でPC上でどちらが使用されているかを確認することが可能です。

Console.WriteLine(BitConverter.IsLittleEndian); 

ネットワークの場合、符号付き整数を扱う場合のみ、 IPAddress.NetworkToHostOrder を使用すればBigEndian方式に変換することが可能です。IPAddress.NetworkToHostOrder メソッド (System.Net) | Microsoft Docs

しかし、符号なし整数の場合は、Network関係のメソッドにはメソッドが用意されていないので、別のメソッドを使用する必要がある。 そこで発見したのがBinaryPrimitives.ReadInt16LittleEndian(ReadOnlySpan<Byte>) メソッド (System.Buffers.Binary) | Microsoft Docs

using System.Buffers.Binary;
var value = 16UL;

// BitConverterはLittleEndianでエンドードさていている。
var intValue = BitConverter.GetBytes(value);
Console.WriteLine(BinaryPrimitives.ReadUInt64LittleEndian(new ReadOnlySpan<byte>(intValue)));

var bytes = new byte[8];
// BigEndianでエンコード、デコードする。
BinaryPrimitives.WriteUInt64BigEndian(bytes, value);
Console.WriteLine(BinaryPrimitives.ReadInt64BigEndian(new ReadOnlySpan<byte>(bytes)));

参考