C 将长十六进制数转换为长整型
我有很长的十六进制数,例如,a3dafc126e(10个字符长),我想使用sscanf读取并转换为十进制数:C 将长十六进制数转换为长整型,c,int,long-integer,scanf,C,Int,Long Integer,Scanf,我有很长的十六进制数,例如,a3dafc126e(10个字符长),我想使用sscanf读取并转换为十进制数: long long int timestamp=0; result = sscanf(msgPtr,"%10x", ×tamp); //msgptr contains the string a3dafc126e printf("%lld\n",timestamp); 然而结果是 3673952878 对应于dafc126e 你能告诉我,我做错了什么,scanf只读取8
long long int timestamp=0;
result = sscanf(msgPtr,"%10x", ×tamp); //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
选项)。