arduino / arduino/ArduinoCore-API
Unexpected behaviour of print(char, HEX) and print(int, HEX)
- 主要语言
- 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