[英]How to change my sprintf format string, based on size of long
我想用printf
和scanf
從十六進制字符串中讀取一些uint64_t
值。
並非我使用的所有平台都具有相同的long
或long long
大小,因此,如果我使用"%llx"
之類的格式字符串, "%llx"
在長為128位的平台上發出警告,而"%lx"
會在平台,長期以來一直是64位(並且更長)。
我的第一個想法是使用宏定義格式字符串,但是宏表達式不支持sizeof。
有沒有一種方法可以定義我的格式字符串,使其可以在任何平台上運行,最好不要發出警告?
uint64_t
的格式字符串由宏PRIu64
定義
例如:
uint64_t foo = 0;
printf("%" PRIu64 "\n", foo);
scanf
存在類似的格式字符串,在這種情況下為SCNu64
。 這些是<inttypes.h>
定義的宏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.