0
char data[40] = {'\0'};
uint8_t Plevel= 0xA5;
uint8_t status = 0x21;
uint16_t ID = 0xABCD;
snprintf(data, 5, "%"PRIu8"%"PRIu8"%"PRIu16"",Plevel, status, ID);
printf("data:%s\n",data);
выхода: 1653данных uint8_t преобразование типа/uint16_t на символ [] с помощью snprintf
http://www.asciitohex.com/ Я использую, чтобы увидеть преобразования, но не мог получить, почему он выводит 1653.
Может кто-нибудь, пожалуйста, объясните конверсии?
спасибо :) это не часть моего вопроса, но я был бы счастлив, если бы вы могли ответить на него. Моя цель - хранить uin8_t как 1 байт (я пытаюсь выполнить сериализацию данных). Нужен ли мне конвертер hex в ASCII или я могу его хранить по-другому через snprintf вместо использования «PRIu8»? – sven
Тип 'uint8_t' *** *** хранится как один байт. Не имеет значения, назначаете ли вы значение как hex '0xA5' или десятичную' 165'. Оба они представляют одно и то же значение. В одном байте не хранится '0xA5' и' 165' буквально: он содержит битовый шаблон, представляющий значение. –
Я имел в виду, чтобы передать 0xA5 в «данные», ему требуется 3 байта (длина строки) на snprintf. но я хочу сохранить его как 1 символ вместо 3. Могу ли я использовать что-либо еще, кроме% «PRIu8» для snprintf? или мне нужен конвертер hex в ASCII? – sven