C++ Arduino序列。打印(,BIN)异常行为
代码: 输出:C++ Arduino序列。打印(,BIN)异常行为,c++,arduino,C++,Arduino,代码: 输出: char a = 0x70; char b = 0x80; Serial.println(a, BIN); // Should print 1110000 Serial.println(b, BIN); // Should print 10000000 void setup() { Serial.begin(9600); // Confirm observations from question char a = 0x70; char b = 0x80;
char a = 0x70;
char b = 0x80;
Serial.println(a, BIN); // Should print 1110000
Serial.println(b, BIN); // Should print 10000000
void setup() {
Serial.begin(9600);
// Confirm observations from question
char a = 0x70;
char b = 0x80;
long aPrint = Serial.println(a, BIN); // Should print 1110000
long bPrint = Serial.println(b, BIN); // Should print 10000000
// Output println results (Ben comment #1)
Serial.print("aPrint: ");
Serial.println(aPrint);
Serial.print("bPrint: ");
Serial.println(bPrint);
// Explicit cast from char
Serial.print("(int)b: ");
Serial.println((int)b);
// Via unsigned char
Serial.print("(unsigned char)b: ");
Serial.println((unsigned char)b);
// And print in binary
Serial.println((unsigned char)b, BIN);
}
void loop() {
}
我知道这与第一位是1有关,它是一个负数,也许它会尝试在默认情况下将其打印为
int
?然而,使字符未签名并不能改变这一点。这是受@Ben对这个问题的评论启发的。似乎是Serial.println((unsigned char)b,BIN)代码>获取所需的输出
这是我的完整草图:
1110000
11111111111111111111111110000000
输出:
char a = 0x70;
char b = 0x80;
Serial.println(a, BIN); // Should print 1110000
Serial.println(b, BIN); // Should print 10000000
void setup() {
Serial.begin(9600);
// Confirm observations from question
char a = 0x70;
char b = 0x80;
long aPrint = Serial.println(a, BIN); // Should print 1110000
long bPrint = Serial.println(b, BIN); // Should print 10000000
// Output println results (Ben comment #1)
Serial.print("aPrint: ");
Serial.println(aPrint);
Serial.print("bPrint: ");
Serial.println(bPrint);
// Explicit cast from char
Serial.print("(int)b: ");
Serial.println((int)b);
// Via unsigned char
Serial.print("(unsigned char)b: ");
Serial.println((unsigned char)b);
// And print in binary
Serial.println((unsigned char)b, BIN);
}
void loop() {
}
char
似乎是您计算机上的签名类型。这意味着当您将它传递给println
,它需要一个int
,它将得到您在那里看到的值。按照其他答案中的建议使用强制转换或切换到无符号字符
编辑:我注意到你的帖子说使用未签名
没有帮助。这可能表明API在内部做了一些有趣的事情。您能为该println分配一个变量吗(是的,println()实际上返回了一些东西:)?另外,如果您事先强制转换它呢?