Dez-Hex Umwandler

Gast #2503836
/*
Der kommt irgendwie mit den Vergleichen nicht kla.. und nur Gott weiß 
warum..

Am Ende soll hier ein DUAL -> HEX umwandler für die Zahlen 1-16 
einstehen,

Wenn z.B die die Zahl 15 gespeichert ist, dann hat
ports[0] den WErt 1 und ports[1] den Wert 5
*/

  c = toupper(cbf_get(rx_buf));
  ports[0]=c;

  c = toupper(cbf_get(rx_buf));
  ports[1]=c;

if (ports[0] >='0' && ports[0] <='1' && ports[1] >='0' && ports[1] 
<='F')
    {
      cbf_put(cmd_buf, 'I');
      cbf_put(cmd_buf, 'S');
      cbf_put(cmd_buf, myadress );
      cbf_put(cmd_buf, 0x00);
      cbf_init(rx_buf);

      cbf_put(cmd_buf, 0x01);
      cbf_put(cmd_buf, 'S');
      cbf_put(cmd_buf, 0x01);
      cbf_put(cmd_buf, 'C');

      cbf_put(tx_buf, 'S');
      cbf_put(tx_buf, 'C');
      cbf_put(tx_buf, ' ');
                }


if (ports[0]==0)
{
cbf_put(rx_buf, ports[0]);
cbf_put(rx_buf, ports[1]);
}

else if(ports[0] == '1' && ports[1] == '0')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'A');}

else if(ports[0] == '1' && ports[1] == '1')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'B');}

else if(ports[0] == '1' && ports[1] == '2')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'C');}

else if(ports[0] == '1' && ports[1] == '3')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'D');}

else if(ports[0] == '1' && ports[1] == '4')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'E');}

else if(ports[0] == '1' && ports[1] == '5')
{cbf_put(rx_buf, '0');
cbf_put(rx_buf, 'F');}

else if(ports[0] == '1' && ports[1] == '6')
{cbf_put(rx_buf, '1');
cbf_put(rx_buf, '0');}


else
{return parse_error(tx_buf, '?', PSTR("Y"));
}
Gast #2503855
a) Was ist jetzt das Problem, und was ist die Frage?
b) Sourcecode entweder mit
1
  [c]
2
  [/c]
formatieren, oder als .c-Datei anhängen. Ohne das kann das kaum einer 
lesen.

Oliver
#2503862
Patrick schrieb:
> /*
> Der kommt irgendwie mit den Vergleichen nicht kla.. und nur Gott weiß
> warum..

Und der sagt nix.
Genauso, wie deine Fehlerbeschreibung nix sagt.

> Wenn z.B die die Zahl 15 gespeichert ist, dann hat
> ports[0] den WErt 1 und ports[1] den Wert 5
> */
>
>   c = toupper(cbf_get(rx_buf));
>   ports[0]=c;
>
>   c = toupper(cbf_get(rx_buf));
>   ports[1]=c;
>
> if (ports[0] >='0' && ports[0] <='1' && ports[1] >='0' && ports[1]
> <='F')

wo sind denn hier Zahlen im Spiel?
An dieser Stelle handelt das Programm immer noch von Zeichen. Und 
Zeichen wie '0', '1', ... '9', 'A', 'F' aber auch '+', '#', '(' sind 
einfach nur Zeichen. Jedes Zeichen hat einen Code und dieser Code ist in 
ports[0] gespeichert.
Aber: Der Code sagt nicht unbedingt etwas über die Reihenfolge der 
Zeichen, egal ob aufsteigend oder absteigend aus!
C gibt dir zwar die Garantie, dass die Zeichen '0' bis '9' codemäsig 
gesehen eine Reihe bilden, d.h. das das Zeichen '3' unmittelbar auf das 
Zeichen '2' folgt, aber C sagt nichts darüber aus, ob '5' jetzt 
beispielsweise einen größeren oder einen kleineren Code als 'W' hat, 
bzw. überhaupt ob der Code von 'W' größer oder kleiner als zb der Code 
von 'V' ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.