2012-06-17 21 views
8

< 8> v8 bitset'i var ve değeri "11001101" gibi bir şey, nasıl char'a dönüştürebilirim? Tek bir harfe ihtiyacım var. "F" harfi gibi = 01100110.<8> bitset'i char ++ 'ya dönüştürmek mümkün mü?

P.S. Yardım için teşekkürler. Bu, bitlerdeki rastgele hataları göstermek için buna ihtiyacım vardı. Örneğin f hatası olmadan, ve hata gibi bir şey, dosyadaki tüm metin ile vb. Metinde bu tür hataları açıkça görebilirsiniz.

+1

Hadi, örnek değerini bile değiştirmediniz. –

+3

Bence bu adam bitset <8>'u bir diziye değil, tek bir karaktere dönüştürmeyi soruyor. –

+0

Soruyu anladım, bitset – alexm

cevap

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

Yukarıdaki satırlar boyunca bir şey çalışmalıdır. Bit alanının düz bir char kullanarak gösterilemeyen bir değer içerebileceğini unutmayın (bu uygulama, imzalanıp imzalanmayacağına göre tanımlanır) - böylece dökümden önce her zaman kontrol etmelisiniz.

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

dizgesini değil, tüm bitset dizisinden tek bir skaler char() elde etmese de, "bitset <8>" ise, "imzasız" olarak gösterilemeyen bir değer içermeyecektir. char'. Yani bu 'char''dan daha iyi bir seçenek olabilir. Ve siz * sadece, uygulamanızın menzil dışı değerlerin imzalı türlere dönüştürülmesinin merhametine kendinizi atabilirsiniz. –

+0

Düz "char" imzalı olup olmadığını bilmiyoruz. Bir örnek olması için 8 'aldım. Ama bunu düzeltirim. – dirkgently

+1

Tam olarak, bu yüzden "imzasız char" demek daha iyi bir seçenek olabilir, çünkü sadece "belki" olabilir, çünkü eğer soru soranın gerçekten bir "karaktere" ihtiyacı varsa, ilk söylediğin şey doğruysa, değeri kontrol etmelidir. Ve neden '8'in bir örnek olduğunu varsayalım, sadece bu soruda iki kez belirtilmemiş,' char '' a dönüştürmek isteyen bir bitset doğal boyutudur. "Nasıl bir bitset <127>" char dönüştürebilirim çok stupider bir soru olurdu ... –

İlgili konular