Спецификаторы формата для uint8 t, uint16 t,...?
если у меня есть переменная, я могу использовать sscanf
как показано ниже с помощью спецификатора формата %d.
sscanf (line, "Value of integer: %dn", &my_integer);
где я могу найти спецификаторы формата для uint8_t
, uint16_t
, uint32_t
и uint64_t
?
uint64_t имеет, вероятно, %lu.
6 ответов
Они объявлены в <inttypes.h>
как макросы: SCNd8, SCNd16, SCNd32 и SCNd64.
Пример (для int32_t):
sscanf (line, "Value of integer: %" SCNd32 "\n", &my_integer);
их формат PRI (для printf)/SCN (для сканирования), то o, u, x, X d, i для соответствующего спецификатора, то ничего, по крайней мере, быстро, МАКС, то размер (очевидно, нет размера для MAX). Некоторые другие примеры: PRIo8, PRIuMAX, SCNoFAST16.
Edit: BTW a вопрос спросил, почему этот метод был использован. Вы можете найти ответы интересный.
как говорили другие, включают в себя <stdint.h>
заголовок, определяющий макросы формата. В C++, однако, определить __STDC_FORMAT_MACROS
до включения его. Из stdint.h:
/* The ISO C99 standard specifies that these macros must only be
defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_FORMAT_MACROS
по данным 7.19.6 форматированные функции ввода / вывода of ISO / IEC 9899: TC2, нет таких спецификаторов формата (поэтому я сомневаюсь, что есть для C++2003). Несмотря на то, что есть некоторые #define-макросы, доступные в c99 inttypes.h
, cinttypes
и inttypes.h
не являются частью текущего стандарта. Конечно, целочисленные типы фиксированного размера также нестандартны.
В общем, я серьезно recommemend вместо использования потоков:
<any_type> x;
f >> x;
и было сделано. Например:
std::stringstream ss;
uint32_t u;
std::cin >> u;
это имеет то преимущество, что один раз в будущем изменение типа переменной не вызывает каскада тонких ошибок и неопределенного поведения.
В C, заголовок <inttypes.h>
и такие форматы, как SCNX8, SCNd16.
тот же заголовок, вероятно, работает и для C++.
правильный формат для чтения uint64_t
(typedef unsigned long long int), с scanf
, а не sscanf
, "%" SCNu64
и для печати тоже SCNu64
Образец. в вашем коде вы читаете, например, переменную my_integer, тогда вы делаете
scanf ("Value of integer:%" SCNu64, & my_integer);
и написать то же самое, но с printf.