arduino / arduino/ArduinoCore-API
Unexpected behaviour of print(char, HEX) and print(int, HEX)
- Lenguaje dominante
- C++
- Estrellas
- 306
- Forks
- 150
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
```
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
```
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza localizando las sobrecargas Serial.print(char c, int base) y Serial.print(int, int base) descritas en el issue, y luego ejecuta el sketch de ejemplo completo para reproducir la salida. Se considera terminado cuando la salida hexadecimal utiliza el ancho del operando, produciendo FFFF para -1 como int y FF para -1 como char, mientras se conserva la salida decimal existente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- cpp
- Área
- api, embedded-iot
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100