Преобразование гекса в строку в 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