Чтение подписанного символа как неподписанного - PullRequest
1 голос
/ 12 октября 2011

Рассмотрим эту маленькую программу:

#include <stdio.h>
int main()
{
    char c = 0xFF;
    printf("%d\n", c);

    return 0;
}

Его вывод -1, как и ожидалось (учитывая, что char подписано в моем система). Я пытаюсь напечатать 255. Это из Конечно, упрощение реальной ситуации, где я не могу просто определить c как без знака.

Первым возможным изменением будет использование %u вместо средства форматирования, но здесь применяются обычные правила продвижения по типу, и номер печатается как 2 32 - 1.

Так есть ли способ прочитать подписанный символ как неподписанный до того, как получит повышен до INT? Я мог бы создать указатель на неподписанный символ, установленный на адрес c, и разыщите его позже, но не уверен, что это лучший подход.

1 Ответ

4 голосов
/ 12 октября 2011

c продвигается с использованием подписанных правил продвижения.Примените c к unsigned, чтобы использовать беззнаковое повышение.

printf("%u\n", (unsigned char)c);

Беззнаковый символ будет повышен до unsigned int.

...