arduino / arduino/ArduinoCore-API

Unexpected behaviour of print(char, HEX) and print(int, HEX)

未关闭
#66 6 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
C++
星标
306
派生
150
PR 合并指标
30 天内没有已合并 PR

描述

```
char c = 255;
Serial.print(c, HEX);
```

produces

```
FFFFFFFF
```

This is due to the fact that `print(char c, int base)` convert char c (1 byte) into an unsigned long (4 bytes). As char is signed 255 is in fact -1(Two's complement), once written in 4 bytes it becomes FFFFFFFF. But as a user I would rather have FF than FFFFFFFF.

The problem exist with int (2 bytes) too

Here is a more complete example:

```
void setup() {
Serial.begin(9600);
int i = 1;
Serial.print("i: ");
Serial.print(i, 10);
Serial.print(" | ");
Serial.println(i, HEX);
i = -1;
Serial.print("i: ");
Serial.print(i, 10);
Serial.print(" | ");
Serial.println(i, HEX);

char c = 127;
Serial.print("c: ");
Serial.print(c, 10);
Serial.print(" | ");
Serial.println(c, HEX);
c = 255;
Serial.print("c: ");
Serial.print(c, 10);
Serial.print(" | ");
Serial.println(c, HEX);
}

void loop() {}
```

output

```
i: 1 | 1
i: -1 | FFFFFFFF
c: 127 | 7F
c: -1 | FFFFFFFF
```

where I owuld rather have

```
i: 1 | 1
i: -1 | FFFF
c: 127 | 7F
c: -1 | FF
```

贡献指南

这个仓库没有索引到贡献指南

调研方向

首先定位 issue 中描述的 Serial.print(char c, int base) 和 Serial.print(int, int base) 重载,然后运行完整的示例 sketch 以复现输出。当十六进制输出使用操作数的宽度,对作为 int 的 -1 产生 FFFF、对作为 char 的 -1 产生 FF,同时保留现有的十进制输出时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
cpp
领域
api, embedded-iot
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。