gpt4 book ai didi

c - stm32下使用scanf函数的问题

转载 作者:行者123 更新时间:2023-11-30 18:33:15 25 4
gpt4 key购买 nike

在使用 STM32F437 的 sscanf() 过程中,我遇到了一些有趣的事情:

uint8_t var;
st = sscanf(&line[off], "%x", &var);
st = sscanf(&line[off], "%hhx", &var);

当我尝试编译第一行时,我从 gcc 得到建议,使用“%hhx”而不是“%x”。但是当我将这一行更改为第二行时 - gcc 的建议消失了,但扫描结果是错误的。

当 &line[off] 指向以下字符串:52 时,第一个 scanf(..."%x"...) 工作正常,给出 0x52,但第二个 scanf(..."%hhx".. .) 产生结果 0x34。

似乎 scanf("..."%hhx"...") 将 52 解释为十进制值 52,然后将其转换为十六进制值 0x34。我使用的是arm-none-eabi-gcc版本9.2.0。

我错过了什么或者这是 scanf() 中的一些错误吗?

最佳答案

您正在链接通常称为“newlib-nano”的内容。 Nano 版本的 newlib 附带标准库的有限支持 - 它不支持所有 C99 长度修饰符,例如两者中的 llhh printfscanf

解决方案是链接 newlib 的完整实现,因此从链接选项中删除 -specs=nano.specs 或类似内容,或者不要使用 hh < em>长度修饰符使用 newlib-nano 编译或使用其他方法将字符串转换为整数时。

关于c - stm32下使用scanf函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com