質問

たとえば、バイトアレイで5を表す場合は普通は{0x00,0x00,0x00,0x05}のようにsmthになりますが、ビットコンバーターは逆配列({0x05,0x00,0x00,0x00,0x00})を与えてくれます。 m間違っていますか?

役に立ちましたか?

解決

オッズは、あなたがリトルエンディアンアーキテクチャにいるということです(これは、一般的なX86およびX86-64アーキテクチャの場合です)。でこれを確認できます BitConverter.IsLittleEndian 財産。そのようなアーキテクチャでは、 少しでも 重要 バイト 最初に来て、それがその理由を説明します

BitConverter.GetBytes(5)

生成

{ 0x05, 0x00, 0x00, 0x00 }

もちろん、システム/ターゲットのエンディアン性に基づいて必要に応じてアレイを逆転させることができます。あなたはそのようなものを見つけることができます EndianBitConverter リストされています ここ.

他のヒント

次のラッパークラスを書き、のケースを処理しました BitConverter リトルエンディエンを期待しています。

    public static Int16 ToInt16(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt16(data, offset);
    }

    public static Int32 ToInt32(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt32(data, offset);
    }

    public static Int64 ToInt64(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt64(data, offset);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top