2015-11-20 1 views
3

J'ai la chaîne "abcdefghij", et je veux avoir cette chaîne en bits. J'ai essayé comme ceci:Convertit le tableau d'octets en numéro de tableau de bits

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

Dans K i ont [0x61, 0x62, ..., 0x6a] - c'est ok. Mais dans d j'ai [1000 0110, 0100 0110, ..., 0101 0110] (pas exactement comme je l'ai tapé, c'est juste tableau de true et false). En d, il est converti en bit [0] ... bit [7], du bit le moins au bit le plus important. Ce n'est pas ce que je veux.

Je veux sauvegarder les bits de la plus simple au moins: [0110 0001, 0110, 0010, ..., 0110 1010].

Comment puis-je m'en occuper?

+0

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

Répondre

0

J'ai trouvé la réponse. Dans ma situation je peux utiliser ce morceau de code this après:

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

Maintenant dans bits avoir ce que je veux.

Et ceci est la transformation inverse:

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