Hex Wert wird nicht erkannt

Gast #4932840
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|
#4932869
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.
Gast #4932896
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.
Gast #4933408
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.