2009-09-27 133 views

回答

-1

我敢打賭,有一個聰明的方法來做到這一點,但它的工作原理:

private string byteToBitsString(byte byteIn) 
{ 
    char[] bits = new char[8]; 
    bits(0) = Convert.ToString((byteIn/128) % 2); 
    bits(1) = Convert.ToString((byteIn/64) % 2); 
    bits(2) = Convert.ToString((byteIn/32) % 2); 
    bits(3) = Convert.ToString((byteIn/16) % 2); 
    bits(4) = Convert.ToString((byteIn/8) % 2); 
    bits(5) = Convert.ToString((byteIn/4) % 2); 
    bits(6) = Convert.ToString((byteIn/2) % 2); 
    bits(7) = Convert.ToString((byteIn/1) % 2); 
    return bits; 
} 
+2

請參閱使用Convert.ToString(value,2).PadLeft(8,'0')的其他答案。 –

21

看看Convert.ToString()。您可以兩種方式使用它,用於轉換字節 - >位串,反之亦然。

byte value = 56; 
// There ... 
string bits = Convert.ToString(value, 2); 
// ...and Back Again 
value = Convert.ToByte(bits, 2); 
+2

這個答案應該是被接受的答案。當只給出一個參數時,Convert.ToString(byte)返回一個十六進制字符串,但當給定第二個參數時,Convert.ToString(byte,int)可以使用基數2,8,10或16。 ToString(56,2)'''返回''「」111000「'''但是如果你想要所有的位,那麼'''Convert.ToString(56,2).PadLeft(8,'0') ''''''00111000'''' –

2

這裏的clweek的重新編寫方法,實際工作:
我都用來代替字符數組StringBuilder類。

樣品:byteToBitsString(157)打印 「00101111」

private string byteToBitsString(byte byteIn) 
    { 
     var bitsString = new StringBuilder(8); 

     bitsString.Append(Convert.ToString((byteIn/128) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/64) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/32) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/16) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/8) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/4) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/2) % 2)); 
     bitsString.Append(Convert.ToString((byteIn/1) % 2)); 

     return bitsString.ToString(); 
    } 
+0

是我的竊聽?我將它從VB轉換而來,並且不會定期使用C#,所以有可能出現愚蠢的錯誤,但它是什麼? – clweeks

0

這裏有一個位模擬的方式來做到這一點:

public static string ByteToBinaryString(byte byteIn) 
{ 
    StringBuilder out_string = new StringBuilder(); 
    byte mask = 128; 
    for (int i = 7; i >=0 ; --i) 
    { 
     out_string.Append((byteIn & mask) != 0 ? "1" : "0"); 
     mask >>= 1; 
    } 
    return out_string.ToString(); 
} 
0

或位的敲打的方式來做到這一點豪華的變體:

public static string ToByteFormat(int valIn, int digits) 
    { 
     var bitsString = new StringBuilder(digits); 
     int mask = (1 << digits - 1); 
     for(int i = 0; i < digits; i++) 
     { 
      bitsString.Append((valIn & mask) != 0 ? "1" : "0"); 
      mask >>= 1; 
     } 
     return bitsString.ToString(); 
    }