代码:
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
不会改变这一点。
答案 0 :(得分:1)
这是受到@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
答案 1 :(得分:0)
char
似乎是您计算机上的签名类型。这意味着当您将其传递给期望println
的{{1}}时,它会获得您在此处看到的值sign-extended。使用其他答案中建议的演员表或切换到int
。
修改:我注意到您的帖子说使用unsigned char
并没有帮助。这可能表明API在内部做了一些有趣的事情。