2015-11-20 46 views
3

我有字符串“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],从最小到最大位。这不是我想要的。

我想保存从最sungifficant到最少的位:[0110 0001, 0110, 0010, ..., 0110 1010]

我该如何处理?

+0

http://stackoverflow.com/questions/3587826/is-there-a-built-in-function-to-reverse-bit-order –

回答

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; 
}