Forum: Mikrocontroller und Digitale Elektronik Hex Wert wird nicht erkannt


von Dennis (Gast)


Lesenswert?

HI, ich habe ein kleines Problem mit einer If abfrage...

ich empfange ein Array..  dort HAT der [8] den Wert 0xDD.
Allerdings reagiert meine if Abfrage nicht dadrauf.
1
if(uart_string[8] == 0xDD){
2
  uart_string[0] = uart_string[8];
3
  rs485_puts(uart_string,sizeof(uart_string));
4
}

gehe ich hin und sage != 0xDD dann springt der auch in meine Abfrage und 
sendet meinen uart_string zurück, dann sehe ich auch dass es 0xDD ist.
1
if(uart_string[8] != 0xDD){
2
  uart_string[0] = uart_string[8];
3
  rs485_puts(uart_string,sizeof(uart_string));
4
}

Ausgabe:
 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|16|17|18|19|
DD| 0| 0| 0| 0| 0| 0| 0|DD| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| A|

von Dirk B. (dirkb2)


Lesenswert?

0xDD ist ein positiver Integerwert

Wenn uart_string vom Typ char[] oder char* ist, dann kann es sein, dass 
uart_string[8] vorzeichenbehaftet ist.

0xDD ist dann aber -35

Beim Vergleich wird das uart_string[8] in ein int gewandelt und dann 
verglichen.

von Dirk B. (dirkb2)


Lesenswert?

Achja, eine Lösung:
1
if (uart_string[8] == (char)0xDD)
2
//oder
3
if (uart_string[8] == '\xDD')

Ich sehe gerade "Projekte & Code". Also falsches Unterforum.

von A. S. (Gast)


Lesenswert?

Auch hier gilt wieder: Warnungen einschalten! Zumindest bei der != 
-Version wird der Compiler sagen, dass es "immer" true ist.

Ansonsten generell: Speicher-Bereiche (auch "uart"-"Strings") nach 
möglichkeit immer UNSIGNED. Ich weiss, es ist ein risiges Feld, aber das 
ist sicher auch ein grund, warum es (anders als bei int) 3 
unterschiedliche char-typen gibt:

- signed char
- unsigned char
- char (per Schalter oder Definition signed ODER unsigned)

wenn man etwas als char definiert, dann bitte auch nur Zeichen von 
0..127 und nicht 0xdd.

von Dennis (Gast)


Lesenswert?

Achim S. schrieb:
> Auch hier gilt wieder: Warnungen einschalten! Zumindest bei der !=
> -Version wird der Compiler sagen, dass es "immer" true ist.
>
> Ansonsten generell: Speicher-Bereiche (auch "uart"-"Strings") nach
> möglichkeit immer UNSIGNED. Ich weiss, es ist ein risiges Feld, aber das
> ist sicher auch ein grund, warum es (anders als bei int) 3
> unterschiedliche char-typen gibt:
>
> - signed char
> - unsigned char
> - char (per Schalter oder Definition signed ODER unsigned)
>
> wenn man etwas als char definiert, dann bitte auch nur Zeichen von
> 0..127 und nicht 0xdd.

Danke!!!
das wars:) habe nun sowohl sende als auch empfangs "char" auf unsigned 
gesetzt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.