Преобразование hex в string в C?
Привет я использую Digi dynamic c. Я пытаюсь преобразовать это в string
char readingreg[4];
readingreg[0] = 4a;
readingreg[1] = aa;
readingreg[2] = aa;
readingreg[3] = a0;
в настоящее время, когда я делаю printf
утверждения это должно быть так:
printf("This is element 0: %xn", readingreg[0]);
но я хочу это в строке, чтобы я мог использовать printf
показания
printf("This is element 0: %sn", readingreg[0]);
Я по существу отправляю массив readingreg через порт TCP/IP, для которого мне нужно иметь его как строку. Кажется, я не могу преобразовать его в строку. Спасибо за помощь. Также если кто-то может сказать мне, как сделать каждый элемент за раз, а не весь массив, что было бы хорошо, так как будет только 4 элемента.
2 ответов
0xaa
переполняется, когда plain 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;
}
Если ваша машина большая endian, то вы можете сделать следующее:
char str[9];
sprintf(str, "%x", *(uint32_t *)readingreg);
Если ваша машина немного endian, вам придется поменять порядок байтов:
char str[9];
uint32_t host;
host = htonl(*(uint32_t *)readingreg);
sprintf(str, "%x", host);
Если переносимость является проблемой, вы должны использовать метод два независимо от вашей endianness.
Я получаю следующий вывод:
printf("0x%s\n", str);
0x4aaaaaa0