2014-01-24 3 views
-1

Я пытаюсь преобразовать uint8_t буфер в HEX строку:Преобразовать байты * в шестнадцатеричной строку

uint16_t len = b.length(); 
char* result = (char*) malloc(len * 2 * sizeof(char)); 
int resPos=0; 
while (len > 0) { 
    uint8_t *buffer; 
    uint8_t bytesToRead = min(32, len); 
    buffer = b.readBuffer(bytesToRead); 

    for (int i = 0; i < bytesToRead; i++) { 
     char buf[3]; 
     sprintf(buf, "%02X", buffer[i]); 
     OutPut.println(buf); 
     //memcpy(result + resPos , buf,2); 
     //resPos+=2; 
     //OutPut.println(resPos); 
    } 

    len -= bytesToRead; 
} 

Без комментировал линий, я могу увидеть в моем выходе, шестигранные значения по одному.

Что я хотел бы сделать, в прокомментированном коде возвращается целое значение HEX как char*. Я попробовал прокомментированный код, и у меня есть некоторые ошибки памяти.

ответ

1

Прокомментированный код почти правильный.

Вы забыли только одно: строки C заканчиваются нулем, и вы забыли прекратить свою строку.

+0

где? 'result [resPos + 2] = 0' перед println? –

+0

ehm .. 1) да. после приращения вам даже не понадобится '+ 2'. 2) предпочтительно, если вы не хотите печатать в цикле, то только после цикла. 3) вы могли бы непосредственно sprintf в 'result'. –

+0

Да, печать была предназначена только для отладки. Он будет полностью удален. Я думаю, что проблема - это что-то еще, потому что, как только я memcopy, он продолжает перезагрузку (я программирую микроконтроллер). –

1

Или

char buf[3]; 

result[0] = '0'; result[1] = 'x'; result[2] = 0; 
or 
memcpy(result, "0x"); 

for(i = 0; i < len; i++){ 
    itoa(buffer[i], buf, 16); 

    strcat(result, buf); 
} 

Вальтера

+0

почему «0» и «х»? –

+0

@MajidL Итак, результат: '' 0xa64 "' вместо '" a64 "' –

+0

благодарим вас за ввод. –

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