【发布时间】:2015-08-14 05:26:46
【问题描述】:
我在尝试使用 scanf 从用户那里获取大的十六进制数字(12 个字符)时遇到问题。
它似乎只得到最后 8 个字符,例如 - ABFFFFFFFF 将变为 0000FFFFFFFF。
这是我的代码 -
unsigned long long address;
scanf("%x",&address);
printf("Address: %#014x", address);
对于这个输入:“ABFFFFFFFF”,输出将是:
地址:0x0000ffffffff
我尝试过使用 scanf 格式,但无济于事。
【问题讨论】:
-
根据编译器和平台的不同,您通常需要为
long long值使用不同的格式说明符,即不同于"%x"。 -
@dlask:格式说明符不依赖于编译器或平台,它是
"%llx"。unsigned long long类型的实际大小取决于平台/编译器,但保证至少为 64 位,足够ABFFFFFFFF使用。 -
@chqrlie 你是对的。我对旧的 Microsoft 编译器有疑问,但至少 VC++ 2008 似乎支持
"%llx"。 -
@dlask:为了与旧编译器兼容,经验法则很简单:如果支持
long long,则也支持%lld,如果long long不可用,则使用long和%ld。