2013-11-28 5 views
-1

Я потратил некоторое время, пытаясь заставить строку превратиться в массив неподписанных символов, но не повезло. Я выполняю реализацию AES, и у меня есть все, кроме входной части считывания. Это код, который у меня есть в банкомате.Преобразование строки в unsigned char

string text = "E3 FD 51 12" ; 
    int size = text.length(); 

    unsigned char* charText = new unsigned char[size/2]; 
    int i = 0; 
    std::istringstream text_2(text); 

    unsigned int c; 
    unsigned char ch; 
    while (text_2 >> hex >> c) 
    { 
     ch = c; 
     cout <<ch; 
    } 

Я хочу, чтобы моя строка была в массиве charText. Строка отлично читается в unsigned int, но когда я пытаюсь поместить ее в массив или в unsigned char (ch), она дает мне gibbrish.

Любая помощь будет замечательной.

+2

Первые два символа находятся за пределами диапазона ASCII, 51 дает «Q», а последний символ - это фид. Вы могли бы назвать эту тарабарщину, но что вы ожидали ...? –

+0

Не так ли? Что мне нужно сделать, чтобы прочитать его правильно? – inzombiak

+0

Ну, что такое _correct_, если вам не нравится преобразовывать эти значения в их значения символов? Если вы напечатаете значения 'char' как' int', используя 'std :: cout << std :: hex << int (ch);' вы вернете исходные значения (очевидно, если ваши значения меньше 16 вам нужно установить ширину и символ заполнения '0'. –

ответ

0

Просто введите символ как int.

while (text_2 >> hex >> c) 
{ 
    ch = c; 
    cout << hex << (int)ch; 
} 
+0

нормально, но если я храню способ, которым я в настоящее время не привык, это вызывает проблемы при выполнении умножения на матрицу? – inzombiak

+0

Прошу прощения. Я не понимаю, о чем вы говорите. –

+0

Мне нужно умножить значения, сохраненные с помощью let 0xef – inzombiak

Смежные вопросы