这是Arduino函数sscanf()
的一个奇怪问题。如果跟随它的是1字节值(int
,long
,bool
),它会将扫描整数值(byte
,char
)的最后一个字节归零。 / p>
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
}
如果在someInt
中声明的setup()
一切正常。
我在两个不同的Arduinos上尝到了它,结果是一样的。为什么会这样?
答案 0 :(得分:1)
这是非法的:
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;
...
}