我有字符串“ 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]
(与我键入的不完全相同,它只是true
和false
的数组)。在d
中,它被转换为bit [0] ... bit [7],从最小到最大。这不是我想要的。我希望将位从最容易保存到最少:
[0110 0001, 0110, 0010, ..., 0110 1010]
。我该如何处理?
最佳答案
我找到了答案。
在我的情况下,我可以只使用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;
}