2011-01-28 65 views
30

Tôi muốn hiển thị một byte trong hộp văn bản. Hiện tại tôi đang sử dụng:Byte to Binary String C# - Hiển thị tất cả 8 chữ số

Convert.ToString(MyVeryOwnByte, 2); 

Nhưng khi byte có giá trị 0 khi bắt đầu các 0 đang bị cắt. Ví dụ:

MyVeryOwnByte = 00001110 // Texbox shows -> 1110 
MyVeryOwnByte = 01010101 // Texbox shows -> 1010101 
MyVeryOwnByte = 00000000 // Texbox shows -> <Empty> 
MyVeryOwnByte = 00000001 // Texbox shows -> 1 

Tôi muốn hiển thị tất cả 8 chữ số.

+0

Xem: http://stackoverflow.com/questions/1644609/c-problem-with-byte và cụ thể http://stackoverflow.com/questions/1644609/c-problem-with-byte/1644666#1644666 –

+0

Là mã trong phần này câu hỏi đã [đã bị hiểu lầm bởi một người dùng khác] (http://stackoverflow.com/questions/22894695/preceding-0s-in-integer-value), cần phải chỉ ra rằng 'MyVeryOwnByte' không thực sự là một' byte' ở đây, và đó (nếu đó là mã C# được sử dụng thực tế), chẳng hạn như '01010101' là số * thập phân * (xảy ra chỉ bao gồm số 0 và số); các bit thực tế của các byte tạo nên những con số này trông hơi khác một chút. –

+0

@ O.R.Mapper Nó chỉ là "mã giả". – Hooch

Trả lời

62
Convert.ToString(MyVeryOwnByte, 2).PadLeft(8, '0'); 

này sẽ lấp đầy khoảng trống bên trái với '0' với tổng số 8 ký tự trong chuỗi

1

Pad chuỗi với số không. Trong trường hợp này là PadLeft(length, characterToPadWith). Phương pháp mở rộng rất hữu ích. PadRight() là một phương pháp hữu ích khác.

+1

'PadRight' là một phương pháp hữu ích nhưng không phải trong trường hợp này. Tôi khuyên bạn nên loại bỏ nó khỏi câu trả lời của bạn (hoặc thêm mọi phương thức .NET hữu ích khác - Tôi biết tôi sẽ chọn cái nào: D). –

+1

Ngoài ra, chúng không phải là phương pháp mở rộng. – Gabe

10

Cách bạn thực hiện điều đó phụ thuộc vào cách bạn muốn đầu ra của mình trông như thế nào.

Nếu bạn chỉ muốn "00.011.011", sử dụng một chức năng như thế này:

static string Pad(byte b) 
{ 
    return Convert.ToString(b, 2).PadLeft(8, '0'); 
} 

Nếu bạn muốn đầu ra như "000 ", sử dụng một chức năng như thế này:

static string PadBold(byte b) 
{ 
    string bin = Convert.ToString(b, 2); 
    return new string('0', 8 - bin.Length) + "<b>" + bin + "</b>"; 
} 

Nếu bạn muốn đầu ra như "0001 1011", một chức năng như thế này có thể tốt hơn:

static string PadNibble(byte b) 
{ 
    return Int32.Parse(Convert.ToString(b, 2)).ToString("0000 0000"); 
} 
+0

@ Jeff: Tôi đã đăng phiên bản này bởi vì đôi khi kỹ thuật 'chuỗi mới()' rất hữu ích. Bạn đã không hỏi Gregory đề cập đến 'PadRight', và chức năng đó thậm chí không giải quyết được vấn đề. – Gabe

+0

Cách tôi phản ứng với phản ứng của người khác là hoàn toàn không liên quan. Tôi chỉ nghĩ rằng thật kỳ lạ khi thấy bạn hạ thấp câu trả lời của bạn bằng cách đề cập đến một giải pháp tốt hơn mà bạn không đưa ra và rằng đề xuất bạn đã có không phải là đặc biệt dễ đọc. Vì SO là một nguồn lực để có được câu trả lời hay, bạn nên tốt hơn bao gồm giải pháp PadLeft hoàn toàn và giải pháp thay thế của bạn - bạn có thể là câu trả lời tốt hơn sau đó. Đây không phải là về đầu tiên, nó là tốt nhất. –

+0

@ Jeff: Tôi thích một bài đăng riêng biệt cho mỗi câu trả lời để người khác có thể dễ dàng duyệt qua các câu trả lời mà không cần phải lội qua các bản sao. Tuy nhiên, tôi đã thực hiện một ngoại lệ ngày hôm nay, và chỉ cho bạn đã đặt 3 câu trả lời vào một bài duy nhất. – Gabe

Các vấn đề liên quan