Назначить восьмеричный / шестнадцатеричный объявленный INT/UINT другой переменной

Мой код WIN32 (C++) имеет UINT, который можно назвать номером. Значение этого UINT (или INT не имеет значения) начинается с 0 и распознается как восьмеричное значение. Можно использовать стандартные операторы, а значение сохранит восьмеричную систему. То же самое возможно с шестнадцатеричным (с предыдущим 0x). Проблема в том, что я должен использовать значение числа в буфере для вычисления с ним без изменения значения числа. Я могу присвоить значение, например 07777, буферу в строке объявления, но если используется операция, такая как buffer = число, значение в буфере распознается по десятичной основе.

У кого-нибудь есть решение для меня?

1 ответ

В C нет такого понятия, как "восьмеричное значение". Целые числа хранятся в двоичном виде.

Например, эти три константы:

  • 10
  • 012
  • 0xA

все имеют одинаковый тип и значение. Это просто разные нотации - и разница существует только в вашем исходном коде, а не во время выполнения. Присвоение восьмеричной константы переменной не делает ее восьмеричной.

Например, это:

int n = 012;

сохраняет значение десять в n, Вы можете распечатать это значение в любом из нескольких форматов:

printf("%d\n", n);
printf("0%o\n", n);
printf("0x%x\n", n);

Во всех трех случаях сохраненное значение преобразуется в удобочитаемую последовательность символов в десятичной, восьмеричной или шестнадцатеричной форме.

У кого-нибудь есть решение для меня?

Нет, потому что нет реальной проблемы.

(Благодарность идет к juanchopanza за упоминание об этом в комментарии.)

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