【问题标题】:sscanf long hex number into long long intsscanf long 十六进制数转换为 long long int
【发布时间】:2015-12-18 06:43:35
【问题描述】:

我有很长的十六进制数字,例如a3dafc126e(10 个字符长)我想使用 sscanf 读取并转换为十进制数:

long long int timestamp=0;
result = sscanf(msgPtr,"%10x", &timestamp); //msgptr contains the string a3dafc126e
printf("%lld\n",timestamp);

然而结果是

3673952878

对应dafc126e

你能告诉我,我做错了什么吗,scanf 只读取 8 个十六进制字符而不是 10 个?

【问题讨论】:

    标签: c int long-integer scanf


    【解决方案1】:

    "%10x" 用于读取int 值,而您的int 大小可能为4 个字节。

    要读取long long int的值,请使用sscanf(msgPtr,"%10llx", &timestamp);

    如果您的编译器出现问题或无法正常工作,请尝试sscanf(msgPtr,"%10I64x", &timestamp);

    【讨论】:

    • 可能值得一提的是,I64 转换说明符是非标准 C,而是 MS-C 扩展。
    • 我个人还想提一下,尽管我读到了“它不起作用”这句话...... ;-)
    • 注意:“10”将扫描的字符数限制为10个,一般情况下不需要。
    • 是否有适用于 GCC 的解决方案?因为这些都不行。
    • @KatasticVoyage 您的 GCC 版本是什么?为什么你认为它们不起作用? scanf(msgPtr,"%10llx", &timestamp);GCC 4.4.7 上工作。在某些环境中可能需要设置为 C99 模式(通过-std=c99 选项)。
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多