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()实际上返回了一些东西:)?另外,如果您事先强制转换它呢?