将字节数组转换为位数组问题

时间:2015-11-20 09:30:34

标签: c# arrays bytearray endianness bitarray

我有字符串“abcdefghij”,我希望这个字符串有点。我试过这样:

byte[] K = new byte[10 * sizeof(char)];
K = System.Text.Encoding.UTF8.GetBytes(args[1]);
var d = new BitArray(k);

K我有[0x61, 0x62, ..., 0x6a] - 没关系。但是在d我有[1000 0110, 0100 0110, ..., 0101 0110](与我输入的完全不同,它只是truefalse的数组。在d中,它被转换为位[0] ...位[7],从最少到最大的位数。这不是我想要的。

我希望从大多数sugnifficant到最少保存位:[0110 0001, 0110, 0010, ..., 0110 1010]

我该如何处理?

1 个答案:

答案 0 :(得分:0)

我找到了答案。 在我的情况下,我可以使用this帖子中的那段代码:

byte[] bytes = ...
bool[] bits = bytes.SelectMany(GetBits).ToArray();

...

IEnumerable<bool> GetBits(byte b)
{
    for(int i = 0; i < 8; i++)
    {
        yield return (b & 0x80) != 0;
        b *= 2;
    }
}

现在bits我有我想要的东西。

这是逆转换:

static byte[] GetBytes(bool[] bits)
{
    byte[] bytes = new byte[bits.Length / 8];
    for (int i = 0; i < bits.Length / 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            bytes[i] |= (byte) (Convert.ToByte(bits[(i * 8) + (7 - j)]) << j);
        }
    }
    return bytes;
}