2009-03-17 40 views
6

Nếu tôi có chuỗi "Blue Box" sau, tôi có thể lấy các bit tạo thành chuỗi như thế nào trong C# và loại dữ liệu nào tôi sẽ lưu trữ nó.Làm thế nào tôi có thể nhận được các bit từ một chuỗi trong C#?

Nếu tôi chỉ viết chữ "o", tôi lấy 111 làm byte và 111 làm bit. Là nó cắt bỏ của 0 và nếu tôi làm "oo", tôi nhận được 111 cho mỗi o trong mảng byte, nhưng đối với các bit, tôi nhận được giá trị 28527. Tại sao?

+2

Đọc bài viết này: Tối thiểu tuyệt đối Mọi nhà phát triển phần mềm nên biết về Unicode và mã hóa ký tự (không có exc sử dụng!) http://www.joelonsoftware.com/articles/Unicode.html – mmcdole

Trả lời

14

Nếu bạn muốn các bit trong một định dạng chuỗi, bạn có thể sử dụng chức năng này:

public string GetBits(string input) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (byte b in Encoding.Unicode.GetBytes(input)) 
    { 
     sb.Append(Convert.ToString(b, 2)); 
    } 
    return sb.ToString(); 
} 

Nếu bạn sử dụng của bạn "Blue Box" dụ bạn get:

string bitString = GetBits("Blue Box"); 
// bitString == "100001001101100011101010110010101000000100001001101111011110000" 
5

Điều đó phụ thuộc vào ý bạn là "bit". Bạn đang nói về đại diện ASCII? UTF8? UTF16? Không gian tên System.Text.Encoding sẽ giúp bạn bắt đầu.

+0

ASCII sẽ giới hạn quyền của tôi. – Xaisoft

+0

không phải nếu tất cả văn bản của bạn sẽ là tiếng Anh đơn thuần. –

14

Bạn có thể làm như sau:

byte[] bytes = System.Text.UTF8Encoding.Default.GetBytes("Blue Box"); 
BitArray bits = new System.Collections.BitArray(bytes); 
+1

Không gian tên nào chứa BitArray? – Xaisoft

+1

System.Collections –

+0

+1 - Không bao giờ nhận ra BitArray có thể làm điều đó. –

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