2010-08-27 135 views
34

在c#中,我將byte轉換爲binary,實際答案爲00111111,但給出的結果爲111111。現在我真的需要在前面顯示2個0。誰能告訴我如何做到這一點?將字節轉換爲c中的二進制字符串#

我使用:

Convert.ToString(byteArray[20],2) 

和字節值是63

+0

相似,但相反:http://stackoverflow.com/questions/72176/using-c-what-is-the-most-efficient-method-of-轉換一個字符串包含bi bi – 2010-08-27 19:33:17

回答

38

只要改變你的代碼:

string yourByteString = Convert.ToString(byteArray[20], 2).PadLeft(8, '0'); 
// produces "00111111" 
+0

此方法將始終使字符串與8位數的權利?所以如果我會得到不同的值,例如10001111,這不會在前面添加新的0 – IanCian 2010-08-27 08:59:31

+3

@IanCian是正確的,不管總是有8位數字,所以如果你提供所有的數字,PadLeft將不會做任何事情,除非你不要,它會用0來填充左邊的空格。 – Kelsey 2010-08-27 15:07:46

+0

你是對的 - 我的建議是不正確的。我沒有測試它。 – Zach 2010-08-28 23:59:24

0

試試這個:

public static String convert(byte b) 
{ 
    StringBuilder str = new StringBuilder(8); 
      int[] bl = new int[8]; 

    for (int i = 0; i < bl.Length; i++) 
    {    
     bl[bl.Length - 1 - i] = ((b & (1 << i)) != 0) ? 1 : 0; 
    } 

    foreach (int num in bl) str.Append(num); 

    return str.ToString(); 
} 
19

如果我理解正確,你有20訴你想轉換的線索,所以這只是你寫的帽子的簡單改變。

要更改單個字節至8字符的字符串:Convert.ToString(x, 2).PadLeft(8, '0')

要更改全排列:

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string[] b = a.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')).ToArray(); 
// Returns array: 
// 00000010 
// 00010100 
// 11001000 
// 11111111 
// 01100100 
// 00001010 
// 00000001 

要改變您的字節數組單個串,用空格隔開的字節:

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string s = string.Join(" ", 
    a.Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))); 
// Returns: 00000001 00001010 01100100 11111111 11001000 00010100 00000010 

如果字節排序不正確使用IEnumerable.Reverse()

byte[] a = new byte[] { 1, 10, 100, 255, 200, 20, 2 }; 
string s = string.Join(" ", 
    a.Reverse().Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))); 
// Returns: 00000010 00010100 11001000 11111111 01100100 00001010 00000001 
2

試試這個

public static string ByteArrayToString(byte[] ba) 
    { 
     StringBuilder hex = new StringBuilder(ba.Length * 2); 
     foreach (byte b in ba) 
      hex.AppendFormat("{0:x2}", b); 
     return hex.ToString(); 
    }