gpt4 book ai didi

c++ - 在 Arduino 上使用 sscanf() 将最后一个字节归零

转载 作者:行者123 更新时间:2023-11-30 05:24:31 30 4
gpt4 key购买 nike

这是 Arduino 函数 sscanf() 的一个奇怪问题。如果 1 字节值(boolbyte),它将扫描的整数值(intlong)的最后一个字节清零>, char) 紧随其后。

int someInt;
byte someByte;

void setup() {
Serial.begin(9600);

sscanf("10000 10", "%d %d", &someInt, &someByte);
Serial.println(someInt); // 9984 (0x2700 not 0x2710)
Serial.println(someByte); // 10

sscanf("7FFF F", "%x %x", &someInt, &someByte);
Serial.println(someInt, HEX); // 7F00 (not 7FFF)
Serial.println(someByte, HEX); // F
}

void loop() {
// Some code what uses someInt and someByte
}

如果 someIntsetup() 中声明,则一切正常。

我在两个不同的 Arduinos 上品尝了它,结果是一样的。为什么会这样?

最佳答案

这是非法的:

 sscanf(buf, "%x", /* byte*/ &val ) 

sscanf 系列不是类型安全的。程序员必须控制代码(printf 系列也很危险 - sscanf 更危险)。

第三个参数(以及后面的参数,如果有多个 %d 或 %X)必须是整数地址。 “平台上的自然值”意义上的整数,这里是 2 个字节。

你的想法可以这样写:

int someInt, wrkInt;
byte someByte;

void setup() {
Serial.begin(9600);

sscanf("10000 10", "%d %d", &someInt, &wrkInt); // %X too, rule is the same
someByte = wrkInt;
...
}

关于c++ - 在 Arduino 上使用 sscanf() 将最后一个字节归零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638421/

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