仮定:バイトでビットを反転すると、次の出力が得られるのはなぜですか?
ビッグエンディアン にリトルエンディアンから バイト[]の変換は にバイト[]の各バイトのビットの順序を反転することを意味します。
はこれが正しいと仮定すると、私はこれを理解するために、次の試してみました:
byte[] data = new byte[] { 1, 2, 3, 4, 5, 15, 24 };
byte[] inverted = ToBig(data);
var little = new BitArray(data);
var big = new BitArray(inverted);
int i = 1;
foreach (bool b in little)
{
Console.Write(b ? "1" : "0");
if (i == 8)
{
i = 0;
Console.Write(" ");
}
i++;
}
Console.WriteLine();
i = 1;
foreach (bool b in big)
{
Console.Write(b ? "1" : "0");
if (i == 8)
{
i = 0;
Console.Write(" ");
}
i++;
}
Console.WriteLine();
Console.WriteLine(BitConverter.ToString(data));
Console.WriteLine(BitConverter.ToString(ToBig(data)));
foreach (byte b in data)
{
Console.Write("{0} ", b);
}
Console.WriteLine();
foreach (byte b in inverted)
{
Console.Write("{0} ", b);
}
変換方法:
private static byte[] ToBig(byte[] data)
{
byte[] inverted = new byte[data.Length];
for (int i = 0; i < data.Length; i++)
{
var bits = new BitArray(new byte[] { data[i] });
var invertedBits = new BitArray(bits.Count);
int x = 0;
for (int p = bits.Count - 1; p >= 0; p--)
{
invertedBits[x] = bits[p];
x++;
}
invertedBits.CopyTo(inverted, i);
}
return inverted;
}
この小さなアプリケーションの出力は、私が期待したものとは異なります。
00000001 00000010 00000011 00000100 00000101 00001111 00011000
00000001 00000010 00000011 00000100 00000101 00001111 00011000
80-40-C0-20-A0-F0-18
01-02-03-04-05-0F-18
1 2 3 4 5 15 24
1 2 3 4 5 15 24
何らかの理由でt BitConverterを使用して印刷しない限り、データは変わりません。
私は何を理解していませんか?
更新
新しいコードは次のような出力生成:
10000000 01000000 11000000 00100000 10100000 11110000 00011000
00000001 00000010 00000011 00000100 00000101 00001111 00011000
01-02-03-04-05-0F-18
80-40-C0-20-A0-F0-18
1 2 3 4 5 15 24
128 64 192 32 160 240 24
をしかし、私は、今言われているように私はバイト ないビットを反転する必要があるため、私の方法は、とにかく間違っていますか?
私が作業しているこのハードウェア開発者は、データを読み取ることができないためビットを反転するように指示しました。私は本当に数字では動作しません。これを使用します。この
アプリケーションを使用してい
コンテキスト。
私はどこ
1 =白、0 =黒のファイルへのビットストリームを保存するようになっています。
これらはビットマップ256x64のピクセルを表します。
バイト0からバイト31は、ピクセルの第1の行を表す。 バイト32から第63バイトの第2行。
私はこれらのビットを出力するコードを持っています...しかし、開発者は 私に間違った順序であると私に伝えています...彼はバイトは問題ありませんが、ビットはそうではないと言います。
だからが混乱左ている:P
FYI、エンディアンバイトのワードではなくビットのバイトの順序を指します。 – Michael