参照と値の型 (64 ビットの int) が重複しているため、コード ケースは機能しません。異なる値の型と異なる参照を重ねることはできますが、それらを混在させることはできません。
しかし、それらが機能する場合でも、そのような低レベルのハックは通常、C# では悪い考えです。低レベルのユニオンではなく、変換を行うプロパティを使用することをお勧めします。
おそらく、あなたが実際に望んでいるのは次のとおりです。
internal static class ByteIntegerConverter
{
public static UInt32 LoadLittleEndian32(byte[] buf, int offset)
{
return
(UInt32)(buf[offset + 0])
| (((UInt32)(buf[offset + 1])) << 8)
| (((UInt32)(buf[offset + 2])) << 16)
| (((UInt32)(buf[offset + 3])) << 24);
}
public static void StoreLittleEndian32(byte[] buf, int offset, UInt32 value)
{
buf[offset + 0] = (byte)value;
buf[offset + 1] = (byte)(value >> 8);
buf[offset + 2] = (byte)(value >> 16);
buf[offset + 3] = (byte)(value >> 24);
}
}
UInt32 value = ByteIntegerConverter.LoadLittleEndian32(buf, offset);
// do something with `value`
ByteIntegerConverter.StoreLittleEndian32(buf, offset, value);
これは、コンピューターのネイティブ エンディアンに関係なく、常にリトル エンディアンを使用します。ネイティブのエンディアンが必要なBitConverter.IsLittleEndian
場合は、ビッグ エンディアンの場合は別のシフト定数を確認して使用できます。