2011-10-03 5 views
1

У меня есть googled alot, чтобы узнать, как преобразовать свой unsigned char * в печатную шестнадцатеричную строку. До сих пор я немного понимаю, как все это работает & разница между подписанными & неподписанными символами.Преобразование unsigned char * в удобочитаемую строку & whats эта функция делает

Можете ли вы сказать мне, что эта функция я нашел? И помогите мне devlop функцию, которая преобразует unsigned char * (которая является хешированной строкой) в печатную строку?

делают ли следующая функция этого:
- это перебирает каждый второй символ строки массив символов
- на каждом цикле он считывает символ в позиции строки [х], преобразует его в число без знака (с точностью до 2 знаков после запятой), затем копирует преобразованный символ (число?) в переменные uChar.
- наконец-то он сохраняет неподписанный символ Uchar в шестнадцатеричной

void AppManager :: stringToHex(unsigned char* hexString, char* string, int stringLength) 
{  
    // Post: 

    unsigned char uChar = 0;   

    for (int x = 0; x<stringLength; x+=2)  
    {   
     sscanf_s(&string[x], "%02x", &uChar);   
     hexString[x] = uChar;  
    } 

} 

Так что я предполагаю, что означает, что он преобразует символ в строке беззнаковых (& 2dcp), чтобы убедиться, что он может быть правильно хранится шестнадцатеричный. Почему до двух знаков после запятой, & не простое преобразование из подписанного (если этот символ подписан) в результат без знака в совершенно другой строке?

Если у меня есть unsigned char *, то как я могу конвертировать его в нечто, что позволит мне распечатать его на экране?

ответ

2

Это не десятичные знаки, они цифры. Вы говорите «не дайте мне строку короче, чем 2, если она короче 2 цифр, а затем положите ее на ноль».

Это так, что если у вас есть шестнадцатеричная последовательность 0x0A, она фактически напечатает 0A, а не только A.

Кроме того, здесь нет подписанного/неподписанного преобразования. Шестнадцатеричные строки - это шестнадцатеричные строки - у них нет знака. Они представляют собой двоичное представление данных, и в зависимости от того, как они интерпретируются, их можно читать как целые числа, подкрепленные знаком, целые числа без знака, строки или что-то еще.

+0

Шестнадцатеричные «струны» обычно кодируются человеком, фактически (в противном случае «шестнадцатеричная» часть вообще не имеет смысла). И я, конечно, не назвал бы это «двоичным представлением данных», по крайней мере, тем, что они _less so_, чем они были бы как базовое числовое значение. По крайней мере, менее прямо так. Надеюсь, это имело смысл. –

+0

Позвольте мне высказать следующее: «шестнадцатеричные строки являются неизменным, более компактным и более удобным для человека представлением лежащих в основе двоичных данных» –

+0

, поэтому в этой функции мы просто преобразуем из двоичной строки в шестую строку? И не от char * до unsigned char *? – user593747

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