为什么sscanf()或strtoll()不会将超过9个字节的十六进制字符串转换为十六进制数

时间:2014-04-29 10:43:25

标签: c string

例如。我有一个十六进制字符串" 1800272100A1"。我尝试将其转换为十六进制数。 1800272100A1使用ssanf()如下,

   sscanf(out1,"%lld",&r1);

其中out1包含上面的字符串,r1是long long int。

甚至strtoll()都无法转换相同的字符串,

  r1 = strtoll(out1,NULL,16);

1 个答案:

答案 0 :(得分:6)

您正在使用%lld格式说明符。对于%lld,只有0-9是有效数字。使用%llx进行正确转换。 %llxlong long int整数的十六进制表示的格式说明符。

在您的输入中,1800272100A1'A'%lld的第一个无效数字。所以它会转换到'A'之前。

我不确定为什么strtoll失败了。我阅读了它的文档,你的语法似乎很好。