arduino / arduino/ArduinoCore-API
Unexpected behaviour of print(char, HEX) and print(int, HEX)
- Ngôn ngữ chính
- C++
- Star
- 306
- Fork
- 150
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
```
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
```
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu bằng cách xác định các overload Serial.print(char c, int base) và Serial.print(int, int base) được mô tả trong issue, sau đó chạy sketch ví dụ đầy đủ để tái hiện đầu ra. Được xem là hoàn tất khi đầu ra thập lục phân sử dụng độ rộng của toán hạng, tạo ra FFFF cho -1 dưới dạng int và FF cho -1 dưới dạng char, đồng thời vẫn giữ nguyên đầu ra thập phân hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- cpp
- Lĩnh vực
- api, embedded-iot
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100