さまざまなソースの助けを借りて、コードを必要とせずに生の C# ですべてビット演算を使用して、 、、およびでSwapBytes
エンディアンを交換するバイナリ リーダー クラスにいくつかのメソッドを記述しました。ushort
uint
ulong
unsafe
public ushort SwapBytes(ushort x)
{
return (ushort)((ushort)((x & 0xff) << 8) | ((x >> 8) & 0xff));
}
public uint SwapBytes(uint x)
{
return ((x & 0x000000ff) << 24) +
((x & 0x0000ff00) << 8) +
((x & 0x00ff0000) >> 8) +
((x & 0xff000000) >> 24);
}
public ulong SwapBytes(ulong value)
{
ulong uvalue = value;
ulong swapped =
((0x00000000000000FF) & (uvalue >> 56)
| (0x000000000000FF00) & (uvalue >> 40)
| (0x0000000000FF0000) & (uvalue >> 24)
| (0x00000000FF000000) & (uvalue >> 8)
| (0x000000FF00000000) & (uvalue << 8)
| (0x0000FF0000000000) & (uvalue << 24)
| (0x00FF000000000000) & (uvalue << 40)
| (0xFF00000000000000) & (uvalue << 56));
return swapped;
}
上記と同じメソッドのみを使用して、short、int、long などの各タイプの署名付きバージョンに対して同じメソッドを作成するにはどうすればよいでしょうか。また、上記のメソッドにどのような改善を加えることができますか?