码:

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/

10-11 23:07
查看更多