Я ценю Вашу проблему, но думаю, что Вы определяете реализацию вместо проблемы, в которой Вы нуждаетесь решенный. Вместо того, чтобы преобразовать в фигурные скобки, как насчет того, чтобы работать над путем к Вашей программе экранного доступа, чтобы сказать Вам уровень отступа?
, Например, некоторые люди работали над синтаксисом энергии, окрашивающим для представления уровней отступа Python. Возможно, измененный синтаксис, окрашивающий, мог произвести что-то, что Ваша программа экранного доступа считает?
Нет полностью переносимого способа сделать это, и это доставляет неудобства.
C99 предоставляет механизм для встроенных типов, таких как size_t
с Нотация % zu
(и есть несколько дополнительных аналогичных квалификаторов).
Она также предоставляет заголовок
с макросами, такими как PRIX32, для определения правильного квалификатора для печать 32-битной шестнадцатеричной константы (в данном случае):
printf("32-bit integer: 0x%08" PRIX32 "\n", var_of_type_int32_t);
Для типов, определенных системой (например, определенных в POSIX), AFAIK, нет хорошего способа их обработки. Итак, что я делаю, так это догадываюсь о «безопасном» преобразовании и затем распечатываю соответственно, включая приведение, что вы иллюстрируете в вопросе. Это расстраивает, но я не знаю лучшего способа. В случае сомнений и использования C99, преобразование в ' unsigned long long 'довольно хорошо; может быть случай использования преобразования в uintmax_t
и PRIXMAX или эквивалент.
Или, как FUZxxl напомнил мне, вы можете использовать модификатор j
для обозначения целочисленного типа «макс». Например:
printf("Maximal integer: 0x%08jX\n", (uintmax_t)var_of_type_without_format_letter);