例如。我有一个十六进制字符串" 1800272100A1"。我尝试将其转换为十六进制数。 1800272100A1使用ssanf()如下,
sscanf(out1,"%lld",&r1);
其中out1包含上面的字符串,r1是long long int。
甚至strtoll()都无法转换相同的字符串,
r1 = strtoll(out1,NULL,16);
答案 0 :(得分:6)
您正在使用%lld
格式说明符。对于%lld
,只有0-9
是有效数字。使用%llx
进行正确转换。 %llx
是long long int
整数的十六进制表示的格式说明符。
在您的输入中,1800272100A1
,'A'
是%lld
的第一个无效数字。所以它会转换到'A'
之前。
我不确定为什么strtoll
失败了。我阅读了它的文档,你的语法似乎很好。