8 Bit Umwandeln in Hexzahlen und ausgeben

Gast #636367
Lesenswert?

Hallo,
ich versuche im Moment, 8 Bit, die ich erhalte, mithilfe von 
Bitmanipulation und einer If-Schleife in lesbar Hexzahlen umzuwandeln.

             temp_bwf = bwf; /* bwf sind die Daten, die ich erhalte */
             temp_bwf &= 0xF0; /* glaube nicht, dass das stímmt */
             TXBUF0 = temp_bwf; ???

             temp_bwf = bwf; /* hier arbeite ich mit den letzten Nippel 
*/
             temp_bwf = temp_bwf >>4;
             temp_bwf &= 0x0F;
             TXBUF0 = temp_bwf;


Mit den Bitmanipulationen kenne ich mich nicht so aus.
Und das schlimmste ist, ích muss diesen Wirrwarr an Bits noch in 1-9 und 
A-F für Hex umwandlen.
Mein größtes Problem jedoch ist der Nippelwirrwarr, ich habe dort keinen 
richtigen Durchblick.

Nja, mal sehen, ob wer mir weiterhelfen kann.

Danke
Persönliche Seite #636375
Lesenswert?

Stef wrote:
> Mein größtes Problem jedoch ist der Nippelwirrwarr, ich habe dort keinen
> richtigen Durchblick.
>
Ja das kann bei der Arbeit Mörderisch sein! o.O
ein halbes byte heißt Nibble!

Ich (vermute) das du eine Zahl in (lesbares) ASCII HEX umwandeln willst.
Dein vorgehen ist da schon richtig, nur das du noch einen Offset 
draufaddieren mußt damits auch eine Buchstabe wird (schau dir mal die 
ASCII Tabelle an) Ansosnten bietet C auch funktionen wie sprintf die dir 
das abnehmen...
Gast #636381
Lesenswert?

Das mit dem draufaddieren ist mir klar, denn sonst bekomme ich nur 
Smilys oder komische Zeichen, aber es funktioniert trotzdem noch nicht.

Kann jemand vielleicht ein konkretes Beispiel bringen, wie es richtig 
aussehen müsste???

Danke
Gast #636387
Lesenswert?

Achso, dank, war ich wieder einmal zu langsam


Wie komme ich aber an das höhrere Paar Nippel dran??
Da habe ich noch keine konkrete Idee.
Bis jetzt
1
temp_bwf = bwf;
2
             temp_bwf = temp_bwf >>4;
3
             temp_bwf &= 0x0F;

habe ich hier doch bloß das niedere Paar bearbeitet, oder nicht??
#636424
Lesenswert?

hier mal ein sehr einfaches beispiel:
1
#include <iostream.h>
2

3
int main()
4
{
5
    unsigned char nibble, byte, hex_char;
6
    byte = 0x3A;
7
    
8
    // high nibble
9
    nibble = (byte >> 4); // shift
10
    nibble &= 0x0F; // mask
11
    if(nibble < 10)
12
    {
13
        hex_char = 0x30 + nibble;
14
    }
15
    else
16
    {
17
        hex_char = 0x41 - 10 + nibble;
18
    }
19
    cout << hex_char;
20
    
21
    // low nibble  
22
    nibble = (byte >> 0); // no shift 
23
    nibble &= 0x0F; // mask
24
    if(nibble < 10)
25
    {
26
        hex_char = 0x30 + nibble;
27
    }
28
    else
29
    {
30
        hex_char = 0x41 - 10 + nibble;
31
    }
32
    cout << hex_char;
33
}

Das ganze solltest du so aber nicht verwenden, besser in eine Schleife 
umbauen. Es ändert sich ja nur die die shift Zahl.
Gast #636885
Lesenswert?

Hallo Stef,


ähm, was willst du genau ?

nZahl = 10;

sprintf(szBuff, "0x%X\0", nZahl);

szBuff = 0xA



Im Beispiel oben hast du das höherwertige nible bearbeitet...

11111111 & 0xF0 = 11110000
11111111 & 0x0F = 00001111
10000000 >> 4   = 00010000
00010000 << 4   = 10000000

Hoffe das hilft ...
#636940
Lesenswert?

Uhu Uhuhu wrote:
> Wenn man es gelernt hat, kann man auch die Standard-Funktion itoa dafür
> verwenden...

Gerade bei µCs machen eigene Lösungen meistens mehr Sinn. Die machen 
dann nur das was man auch genau braucht dabei sind sie meistens 
kleiner/schneller als Standardfunktionen.

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