sscanf 将长十六进制数转换为长整型

use*_*087 0 c int scanf long-integer

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

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

然而结果是

3673952878

对应dafc126e

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

Mik*_*CAT 5

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

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

如果你的编译器抱怨或者它不起作用,请尝试sscanf(msgPtr,"%10I64x", &timestamp);

  • 值得一提的是,“I64”转换说明符是非标准 C,而是 MS-C 扩展。 (3认同)