инвертирующая функция (от символа до шестнадцатеричной строки) - PullRequest
0 голосов
/ 10 августа 2011

Мне нужно инвертировать эту функцию, которая используется для преобразования строк, представляющих шестнадцатеричные значения, в представление char

char * extochar(char * in, int inLen){
    int i,k;
    int resInt[inLen/2];
    char * resChar=malloc(inLen/2);

    k=0;
    for(i=0; i<inLen/2; i=i++){
        resInt[k]=chartoint(in[i*2])<<4;
        resInt[k]+=chartoint(in[(i*2)+1]);
        k++;
    }

    for(k=0; k<inLen/2;k++){
        resChar[k]=(char)resInt[k];
    }
    return resChar;
}

Примечание. Допустимыми являются только строки, состоящие из 1234567890abcdef и их длины. Я умею переворачивать второе за цикл (довольно легко), но не первое!

1 Ответ

0 голосов
/ 10 августа 2011

Получите указатель на символ в вашей памяти, который вы хотите представить в шестнадцатеричной форме.Выделите буфер char [] для строкового результата.

Вызовите sprintf с форматированием:

sprintf(stringBufferPtr, "%02hxx", charToTranslatePtr)

Вы можете использовать некоторую базовую арифметику указателей для циклического перемещения по stringbufferptr / chartotranslateptr для выполнения несколькихсимволы за раз, если вы конвертируете uint64_t или что-то тоже.

...