Арифметика на литой указателе

Приведенный ниже код печатает переданную строку в виде шестнадцатеричных значений, я использую ее для проверки строк, содержащих непечатаемые символы, перед передачей в последовательной сети. Я понимаю код, но просто не уверен, почему, если мы предполагаем, что int в моей системе 4 байта, указатель не перемещается на четыре байта каждый раз (unsigned int) *s++ вычисляется циклом. Может кто-нибудь объяснить, почему это так? Есть ли какая-то операторная точность, такая как общая арифметика?

static void printhexstring(const char *s) {
while(*s) {
    printf("<%02X> ", (unsigned int) *s++);
}
printf("\n");
}

1 ответ

Решение
printf("<%02X> ", (unsigned int) *s++);

Вы увеличиваете указатель s который имеет тип char и когда это увеличение сделано указатель s перемещается на один байт, а не на 4 байта. Приведение не влияет на арифметику указателей здесь.

%X преобразует беззнаковое целое в беззнаковое гекса и отображает значение так, что у вас есть приведение unsigned int

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