2010-08-27 83 views
34

Trong C# Tôi đang chuyển đổi byte thành binary, câu trả lời thực tế là 00111111 nhưng kết quả được đưa ra là 111111. Bây giờ tôi thực sự cần phải hiển thị ngay cả 2 0 ở phía trước. Bất cứ ai có thể cho tôi biết làm thế nào để làm điều này?Chuyển đổi một byte thành chuỗi nhị phân trong C#

Tôi đang sử dụng:

Convert.ToString(byteArray[20],2) 

và giá trị byte là 63

+0

tương tự, nhưng ngược lại: http://stackoverflow.com/questions/72176/using-c-what-is-the-most-efficient-method-of- convert-a-string-contains-bi –

Trả lời

38

Chỉ cần thay đổi mã của bạn để:

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

phương pháp này sẽ luôn luôn làm cho chuỗi với 8 chữ số phải không? vì vậy nếu tôi sẽ nhận được một giá trị khác nhau chẳng hạn như 10001111, điều này sẽ không thêm số 0 mới ở trước – IanCian

+3

@IanCian đúng, bất kể sẽ luôn có 8 chữ số để bạn cung cấp tất cả, 'PadLeft' sẽ không làm gì ngoài nếu bạn không, nó sẽ lấp đầy khoảng trống bên trái ở bên trái với số 0. – Kelsey

+0

Bạn nói đúng - đề xuất của tôi không đúng. Tôi đã không kiểm tra nó. – Zach

0

Hãy thử điều này một:

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

Nếu Tôi hiểu chính xác, bạn có 20 v những thứ bạn muốn chuyển đổi, vì vậy nó chỉ là một sự thay đổi đơn giản của chiếc mũ bạn đã viết.

Để thay đổi byte duy nhất để chuỗi 8 char: Convert.ToString(x, 2).PadLeft(8, '0')

Để thay đổi mảng đầy đủ:

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 

Để thay đổi mảng byte của bạn để chuỗi duy nhất, với byte tách biệt với không gian:

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 

nếu thứ tự byte không đúng sử dụng 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

thử này một

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(); 
    } 
Các vấn đề liên quan