Преобразование гекса в строку в C?

Здравствуйте, я использую Digi Dynamic C. Я пытаюсь преобразовать это в строку

char readingreg[4];
readingreg[0] = 4a;
readingreg[1] = aa;
readingreg[2] = aa;
readingreg[3] = a0;

В настоящее время, когда я делаю printf Заявления это должно быть так:

printf("This is element 0: %x\n", readingreg[0]);

Но я хочу это в строке, чтобы я мог использовать printf утверждение как это

  printf("This is element 0: %s\n", readingreg[0]);

Я отправляю массив readreg через порт TCP/IP, для которого он должен быть в виде строки. Я не могу преобразовать его в строку. Спасибо за вашу помощь. Также, если кто-то может сказать мне, как делать каждый элемент за раз, а не целый массив, это было бы хорошо, так как будет только 4 элемента.

2 ответа

Решение

0xaa переполняется, когда обычный char подписано, использовать unsigned char:

#include <stdio.h>

int main(void)
{
    unsigned char readingreg[4];
    readingreg[0] = 0x4a;
    readingreg[1] = 0xaa;
    readingreg[2] = 0xaa;
    readingreg[3] = 0xa0;
    char temp[4];

    sprintf(temp, "%x", readingreg[0]);
    printf("This is element 0: %s\n", temp);
    return 0;
}

Если ваша машина с прямым порядком байтов, вы можете сделать следующее:

char str[9];

sprintf(str, "%x", *(uint32_t *)readingreg);

Если ваша машина имеет прямой порядок байтов, вам придется поменять порядок байтов:

char str[9];
uint32_t host;

host = htonl(*(uint32_t *)readingreg);
sprintf(str, "%x", host);

Если переносимость является проблемой, вы должны использовать второй метод, независимо от вашего порядкового номера.

Я получаю следующий вывод:

printf("0x%s\n", str);

0x4aaaaaa0

Другие вопросы по тегам