【问题标题】:scanf a big hexadecimal value扫描一个大的十六进制值
【发布时间】: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

标签: c hex scanf


【解决方案1】:

scanf 格式和 printf 都必须使用“%llx”。有关更多详细信息,请参阅手册页。

【讨论】:

  • 谢谢你,工作就像一个魅力,仍然不是很熟悉c。
猜你喜欢
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2015-11-10
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2018-07-16
相关资源
最近更新 更多