ASCII-Wert als Dezimalwert ausgeben

Gast #1062193
Hallo zusammen,

ich habe hier ein Programm für die serielle Schnittstelle. Ich habe eine 
Funktion

void outNibble(unsigned char ch)
{
  if ((ch & 0x0f) < 10)
  {
    outChar((ch & 0x0f) + '0');
  }
  else outChar((ch & 0x0f) + '7');
}

zur Umwandlung eines Nibbles (0 bis 0x0F) in ein ASCII-Zeichen.

Die Funktion

void outHexByte(unsigned char ch)
{
  outNibble(ch / 16);  // shift um 4 Stellen nach rechts
  outNibble(ch);
}

gibt mir das ASCII-Zeichen in Hex aus. Wenn ich outHexByte(0x2f); 
aufrufe, wird 0x2F gesendet.

Jetzt möchte ich eine Funktion outDecByte () entwerfen, die mir das Byte 
im dreistelligen Dezimalformat ausgibt ("000" bis "255"), nur das klappt 
bis jetzt nicht.

Ich dachte mir die zwei einzelnen Nibbles in zwei Variablen 
zwischenzuspeichern und diese dann zu addieren, also in etwa so


void outDecByte(unsigned char ch)

char temp1, temp2;

temp1 = outNibble(ch / 16);
temp2 = outNibble(ch);

hexbyte = temp1 + temp2;

Dann könnte ich durch eine Division die einzelnen Ziffern der 
Dezimalzahl ermitteln, also in etwa so

0xFE = 254

0xFE / 100 = 2 Rest 54
54/10 = 5 Rest 4

Das Problem ist nur, dass ich den Code nicht hinbekomme. Das System ist 
ein 8051 (Keil µVision). Vielleicht könnt ihr mir weiterhelefen..

Danke!
Gast #1062208
OK, das will ich ja so machen!!!, aber der Compiler meckert, wenn ich 
die Funktion outNibble() der Variablen temp zuweisen will, also

temp1 = outNibble(ch / 16); //geht schon mal nicht.

Fehlermeldung: "illegal type conversion from/to 'void"
Gast #1062211
>Fehlermeldung: "illegal type conversion from/to 'void"

Steht doch genau das da, was falsch läuft:
Du hast "outNibble" als void deklariert - müsste aber unsigned char 
sein.
Gast #1062218
Stimmt irgendwas mit der Deklaration ist falsch...

So

void outDecByte( unsigned char ch )
{
  unsigned char temp1, temp2, hexbyte;

  temp1 = outNibble(ch / 16);
  temp1 = outNibble(ch);


}

geht das noch nicht.
Gast #1064049
OK, Problem gelöst.
1
void outDecByte( unsigned char ch ) // Ausgabe als Dezimalwert "000" bis "255"
2
{
3
   outNibble(ch / 100); 
4
  ch = (ch % 100);     
5
  outNibble(ch / 10);    
6
  outNibble(ch % 10);
7
}

Antwort schreiben

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