Спецификатор формата для шестнадцатеричного символа в C

StackOverflow https://stackoverflow.com//questions/12701379

  •  12-12-2019
  •  | 
  •  

Вопрос

Существует ли спецификатор формата для sprintf в C, который отображает a char колдовать таким же образом, как %x отображает int чтобы заколдовать?

Это было полезно?

Решение

Да и нет.

С sprintf принимает список переменных аргументов, все аргументы перед этим подвергаются повышению по умолчанию. sprintf получает их.Это значит sprintf воля никогда получить char -- а char всегда будет повышен до int до sprintf получает его (и short тоже будет).

Да, с чего sprintf получает будет int, вы можете использовать %x чтобы преобразовать его в шестнадцатеричный формат, и оно будет работать одинаково, независимо от того, начинается ли это значение как char, short, или int.Если (как это часто бывает) вы хотите напечатать 2 символа для каждого ввода, вы можете использовать %2.2x.

Однако обратите внимание на один момент:если ваш char подписан, и вы начинаете с отрицательного значения, продвижение по int выдаст то же числовое значение, которое обычно не будет быть той же битовой комбинацией, что и исходный символ, поэтому (например) символ со значением -1 обычно распечатывается как ffff если int составляет 16 бит, ffffffff если int 32 бита, или ffffffffffffffff если int составляет 64 бита (при условии типичного представления дополнения до 2 для целых чисел со знаком).

Другие советы

Это то же самое %x.Все char значения преобразуются в int перед передачей в sprintf (или любая другая функция, принимающая переменное количество параметров).

printf("%x\n", 'a');

печать 61

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top