2012-06-17 23 views
8

Tôi có bitset < 8> v8 và giá trị của nó là một cái gì đó giống như "11001101", làm thế nào tôi có thể chuyển đổi nó thành char? Tôi cần một lá thư. Giống như chữ cái "f" = 01100110.Có thể chuyển đổi bitet <8> thành char in C++ không?

P.S. Cảm ơn vì sự giúp đỡ. Tôi cần điều này để minh họa các lỗi ngẫu nhiên theo bit. Ví dụ: không có lỗi f và có lỗi giống như ♥, v.v. với tất cả văn bản trong tệp. Trong văn bản, bạn có thể thấy các lỗi như vậy rõ ràng.

+1

Thôi nào, bạn thậm chí không thay đổi giá trị mẫu. –

+3

Tôi nghĩ rằng anh chàng này thực sự hỏi làm thế nào để chuyển đổi bitet <8> thành một char duy nhất, không phải là một mảng. –

+0

Nếu tôi hiểu câu hỏi đó là về việc lấy một char vô hướng() từ toàn bộ bitet, không phải là mảng – alexm

Trả lời

11
unsigned long i = mybits.to_ulong(); 
unsigned char c = static_cast<unsigned char>(i); // simplest -- no checks for 8 bit bitsets 

Điều gì đó dọc theo các dòng trên sẽ hoạt động. Lưu ý rằng trường bit có thể chứa một giá trị không thể được biểu diễn bằng cách sử dụng một đồng bằng char (đó là triển khai được xác định cho dù nó được ký hay không) - vì vậy bạn nên luôn kiểm tra trước khi truyền.

char c; 
if (i <= CHAR_MAX) 
c = static_cast<char>(i); 
+1

Mặc dù nếu nó là một 'bitet <8>', nó sẽ không chứa một giá trị không thể được biểu diễn trong 'unsigned char'. Vì vậy, đó có thể là một lựa chọn tốt hơn so với 'char'. Và bạn * có thể * chỉ cần ném mình vào lòng thương xót của việc thực hiện của bạn chuyển đổi các giá trị ngoài phạm vi sang các loại đã ký. –

+0

Chúng tôi không biết nếu ký tự 'char' được ký. Tôi cho rằng '8' là một ví dụ. Nhưng tôi sẽ sửa lỗi đó. – dirkgently

+1

Chính xác, đó là lý do tại sao tôi nói 'unsigned char' có thể là một lựa chọn tốt hơn, mặc dù chỉ" có thể "bởi vì nếu người hỏi thực sự cần' char', thì điều bạn nói trước là chính xác, họ nên kiểm tra giá trị. Và tại sao giả sử '8' là một ví dụ, nó không chỉ được nêu hai lần trong câu hỏi, nó là một kích thước tự nhiên của các bitet để muốn chuyển đổi thành' char'. "Làm thế nào để tôi chuyển đổi một' bitet <127> 'thành char" sẽ là một câu hỏi đáng kinh ngạc ... –