码:
char a = 0x70;
char b = 0x80;
Serial.println(a, BIN); // Should print 1110000
Serial.println(b, BIN); // Should print 10000000
输出:
1110000
11111111111111111111111110000000
我知道这与第一位是负数有关,也许默认情况下它会尝试将其打印为
int
?但是,制作char
unsigned
不会更改此设置。 最佳答案
这是受@Ben对问题的评论的启发。看来Serial.println((unsigned char)b, BIN);
获得了所需的输出。
这是我的完整草图:
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() {
}
输出:
1110000
11111111111111111111111110000000
aPrint: 9
bPrint: 34
(int)b: -128
(unsigned char)b: 128
10000000
关于c++ - Arduino Serial.print(,BIN)奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24087030/