2012-06-17 9 views
8

Mam bitset < 8> v8, a jego wartość jest podobna do "11001101", jak mogę go przekonwertować na char? Potrzebuję jednej litery. Jak litera "f" = 01100110.Czy można przekonwertować bitset <8> na char w C++?

P.S. Dzięki za pomoc. Potrzebowałem tego, aby zilustrować losowe błędy w bitach. Na przykład bez błędu f, z błędem coś jak ♥, i tak dalej z całym tekstem w pliku. W tekście wyraźnie widać takie błędy.

+1

Daj, nawet nie zmieniłeś przykładowej wartości. –

+3

Myślę, że ten facet pyta, jak przekonwertować bitset <8> na pojedynczy znak, a nie tablicę. –

+0

Jeśli zrozumiałem pytanie, chodzi o uzyskanie pojedynczego skalarnego znaku char() z całego zestawu bitowego, a nie tablicy – alexm

Odpowiedz

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

Coś na wzór powyższego powinno zadziałać. Zauważ, że pole bitowe może zawierać wartość, której nie można przedstawić za pomocą zwykłego char (jest to implementacja zdefiniowana, czy jest podpisana, czy nie) - więc zawsze powinieneś sprawdzić przed rzutowaniem.

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

Chociaż jest to "bitset <8>", to nie będzie zawierać wartości, która nie może być reprezentowana w 'unsigned char'. To może być lepsza opcja niż "char". A ty możesz * po prostu rzucić się na łaskę konwersji twojej implementacji wartości poza zasięgiem do podpisanych typów. –

+0

Nie wiemy, czy zwykły znak "char" jest podpisany. Przyjąłem, że '8' jest przykładem. Ale to naprawię. – dirkgently

+1

Dokładnie, dlatego mówię, że 'unsigned char' może być lepszą opcją, chociaż tylko" może ", ponieważ jeśli pytający naprawdę potrzebuje' char', to co powiedziałeś najpierw jest poprawne, powinni sprawdzić wartość. I dlaczego założyć, że '8' jest przykładem, nie jest to tylko dwa razy zadeklarowane w pytaniu, to naturalny rozmiar bitsetu, który chcesz przekonwertować na' char'. "Jak przekonwertować' bitset <127> 'na char" byłoby o wiele głupszym pytaniem ... –

Powiązane problemy