Как вывести 5-байтовые целочисленные значения? - PullRequest
0 голосов
/ 20 апреля 2010

Я только начал читать C и у меня есть вопрос о макросе.
Как я могу напечатать 5-байтовое целочисленное значение (которое определено в макросе)? Например:

#define MAX 0xdeadbeaf12
int main(){
printf(" 0x %2x \n", MAX);
}  

Этот код печатает adbeaf12, но не deadbeaf12.

Как мне распечатать все байты?

Ответы [ 2 ]

5 голосов
/ 20 апреля 2010

Я предпочитаю делать свои предположения о размере переменной явным. Далее используются стандартные (хотя часто неиспользуемые) макросы для определения 64-битной константы и вывода такого количества в виде шестнадцатеричного значения.

#include <stdio.h>

// Pull in UINT64_C and PRIx64 macros
#include <inttypes.h>

// Make this a 64-bit literal value
#define MAX UINT64_C(0xdeadbeaf12)

int main()
{
    // Use PRIx64 which inserts the correct printf specifier for
    // a hex format of a 64-bit value
    printf(" 0x%" PRIx64 " \n", MAX);
}
3 голосов
/ 20 апреля 2010
#define MAX 0xdeadbeaf12LL

Указывает компилятору использовать самый длинный доступный целочисленный тип (который затем будет приведен к соответствующему типу везде, где используется MAX).

На большинстве платформ числовой литеральный суффикс LL будет соответствовать signed long long, это 32 бита (8 байт) в 32-битной системе.Превосходная система ввода текста и предупреждения компилятора позаботятся обо всем остальном.

Ваш printf затем должен использовать модификатор ll:

printf(" 0x %2llx \n", MAX);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...