Hex-Nibble in short int umwandeln (8051)

Gast #1055042
Lesenswert?

Hallo,

ich habe folgende Funktion
1
void outHexByte(unsigned char ch)
2
{   
3
  outNibble(ch / 16);  // shift um 4 Stellen nach rechts
4
  outNibble(ch); 
5
}

mit der ich aus einem HEX-Nibbel ein HexByte zusammensetze.

Wenn ich aus den Nibbeln ein HexWord zur Ausgabe eines "short int" 
machen will, könnte ich das doch mit der CAST-Funktion machen:
1
void outHexWord(unsigned char ch)
2
{
3
  short int lo, hi, word;
4
 
5
  lo = (short int) outNibble(ch / 16);  // shift um 4 Stellen
6
  hi = (short int) outNibble(ch);
7
        word = lo + hi;
8
}

Das funktioniert nicht. Der Comp. (Keil µvision) macht Probleme wegen 
Typenverträglichkeit. Wie funktioniert das?
Gast #1055057
Lesenswert?

Ich habe die Funktion outNibble()
1
 void outNibble(unsigned char ch)
2
{
3
  if ((ch & 0x0f) < 10)
4
  {
5
    outChar((ch & 0x0f) + '0');
6
  }
7
  else outChar((ch & 0x0f) + '7');
8
}

aus der ich wie oben beschrieben ein outHexByte() mache. Jetzt möchte 
ich aus outNibble() ein outHexWord() zur Ausgabe eines "short int" 
machen.
Gast #1055065
Lesenswert?

>Nein, ich möchte aus einem ASCII-Sting in Hex ein short int machen! (Ich
>sollte mich echt mal ein besser ausdrücken).

Also sowas hast du:
string  '3E43'
und daraus soll eine 0x3E43 in einer int-Var stehen?


Das ist aber genau andersrum als deine bisherigen Erklärungen
Gast #1055075
Lesenswert?

>Wenn ich outHexWord(0x2F) aufrufe sollte nach meinem Verständnis
>(welches noch nicht weit reicht) 47 (dezimal rauskommen), da die
>Wortbreite des 8051 8 Bit beträgt.

DU verstehst es nict. 0x27 und 47 ist dieselbe Zahl! Nur durch 
unterschiedliche Basen^(*) dargestellt! Da braucht erstmal nix 
umgerechnet werden.
Deshalb passsen ja in 8bit auch nur so dezimal krumme Werte von 0..255 
rein. Hexadezimal, also zur Basis 16 dargestellt, ergibt das die 
"gerade" Zahl von 0..0xFF.

Anders sieht es aus, wenn du den Inhalt des 8bit-Registers (oder einer 
8bit Variable) auf einem Display ausgeben willst. Dann musst du das in 
einen String umwandeln.

Davon hast du aber nichts erwähnt, obwohl das das vermuten lässt:
outChar((ch & 0x0f) + '0');
                      ^^^^


(*)
Das ist dasselbe, als ob ich sage, der Monitor kostet entweder 100Euro, 
oder 200DM. Das ist genau dasselbe, nur durch unterschiedliche Basen 
(hier: Währungen) dargestellt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren