Как преобразовать массив значений uint8_t в шестнадцатеричную строку дампа в C - PullRequest
0 голосов
/ 10 января 2019

Я хочу преобразовать байтовый массив uint8_t Шестнадцатеричные значения в строку массива char (** те же значения, не ASCII ), а затем просто напечатать этот массив строк, как показано ниже:

вход:

uint8_t myarr[4]={0x11,0x12,0x33,0x1A}

Выход:

 1112331A

Простая строка массива char, а не шестнадцатеричная строка массива.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Старый способ преобразования исходных данных в шестнадцатеричный формат ASCII заключается в использовании справочной таблицы, основанной на полубайтах:

#include <stdint.h>
#include <stdio.h>

int main (void)
{
  uint8_t myarr[4]={0x11,0x12,0x33,0x1A};
  char hexstr[4][2+1] = {0};

  const char HEX [16] = "0123456789ABCDEF";
  for(size_t i=0; i<4; i++)
  {
    hexstr[i][0] =  HEX[ (myarr[i] & 0xF0) >> 4 ];
    hexstr[i][1] =  HEX[ (myarr[i] & 0x0F) ];
    puts(hexstr[i]);
  }
}
0 голосов
/ 10 января 2019

Просто зациклите элементы массива и используйте printf для печати каждого элемента, используя спецификатор формата "%hhx".

Также обратите внимание, что значения не будут храниться как шестнадцатеричные. Шестнадцатеричный это просто форма для представления значений.

...