2015-08-07 6 views
-1

i закодировал программу для преобразования 16 символов шестнадцатеричного числа в 64-битный двоичный код. 64 = 16 hex + 4-разрядный бит.C++ Преобразование Hex Char в Bin

string completeBitmap; 
char bitmap[16]; 
for (int c = 0; c < sizeof(bitmap); c++) 
{ 
    string temp; 
    temp = bitset<4>(bitmap[c]).to_string(); 
    completeBitmap += temp; 
} 

но когда я прочитал 'а', «B 'C', 'D', 'е' и 'F', они не преобразовать правильно. например, 'f' должно быть '1111', но в результате '0110'. спасибо за помощь

+2

символов ' 'f'' случается иметь ASCII код '0x66'. '0110 == 0x6' - наименее значимые четыре бита этого кода ASCII. Какая часть документации предложила вам, что 'bitset <4> ('f')' приведет к набору бит '1111'? –

ответ

0
for(char c = 'a'; c <= 'z'; c++){ 
    bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits! 
    cout << "Letter: " << c << "\t"; 
    cout << "Hex: " << hex << (int)c << "\t"; 
    cout << "Binary: " << binary << endl; 
} 

Проверьте это.

0

bitset<4>(bitmap[c]).to_string(); даст вам двоичный (последняя 4 LSB) для кода ASCII элементов в массиве bitmap

Вы, вероятно, нужно что-то вроде следующего:

for (int c = 0; bitmap[c] ; c++) 
{ 
    string temp; 
    char diff = 0 ; 

    if(bitmap[c] >= 'a' && bitmap[c] <= 'f') diff = -'a' + 10; 

    else if(bitmap[c] >= 'A' && bitmap[c] <= 'F') diff = -'A' + 10 ; 

    else if ( bitmap[c] >= '0' && bitmap[c] <= '9') diff = - '0' ; 

    else assert (false); 

    temp = bitset<4>(bitmap[c] + diff).to_string(); 

    completeBitmap += temp ; 
} 
Смежные вопросы