Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将长十六进制数转换为长整型_C_Int_Long Integer_Scanf - Fatal编程技术网

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

C 将长十六进制数转换为长整型,c,int,long-integer,scanf,C,Int,Long Integer,Scanf,我有很长的十六进制数,例如,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

我有很长的十六进制数,例如,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个吗?

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

要读取
long-long-int
值,请使用
sscanf(msgPtr、%10llx、×tamp)

如果编译器出现问题或无法运行,请尝试sscanf(msgPtr、%10I64x、×tamp)

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

要读取
long-long-int
值,请使用
sscanf(msgPtr、%10llx、×tamp)


如果编译器出现问题或无法运行,请尝试sscanf(msgPtr、%10I64x、×tamp)

值得一提的是,
I64
转换说明符是非标准C,但是MS-C扩展。此外,我个人想提到的是,尽管我读到了短语“它不起作用”,但我还是支持这一点…;-)注:“10”将扫描的字符数限制为10,一般情况下不需要。是否有适用于GCC的解决方案?因为这两个都没有。@KatasticVoyage你的GCC版本是什么?你为什么认为它们不起作用<代码>扫描频率(msgPtr、%10llx、×tamp)在上工作。在某些环境中可能需要设置为C99模式(通过
-std=C99
选项)。值得一提的是,
I64
转换说明符是非标准C,但是MS-C扩展。此外,我个人想提到的是,尽管我读到了短语“它不起作用”…;-)但我还是支持这一点注:“10”将扫描的字符数限制为10,一般情况下不需要。是否有适用于GCC的解决方案?因为这两个都没有。@KatasticVoyage你的GCC版本是什么?你为什么认为它们不起作用<代码>扫描频率(msgPtr、%10llx、×tamp)在上工作。在某些环境中可能需要设置为C99模式(通过
-std=C99
选项)。