char in hex anschreiben

Gast #2686693
Lesenswert?

Schönen Abend,

habe ein Problem bei einem char - Wert in hex - Wert anzuschreiben.

Berechne mir aus einem Char - Array die einzelnen hex - Summen (jedes 
Zeichen wird verxord), nun mein Problem: bekomme ein A ... möchte aber 
den hex - Wert 41 bekommen. Was mache ich falsch.

char x= 0x00;
int e=0;
while(e<fzeiger) {
x^=ftext[e];
e++;
}
return x;  //hier bekomme ich z.B. ein A, möchte aber den hex - Wert 41 
bekommen
Gast #2686706
Lesenswert?

Sabine F. schrieb:
> return x;  //hier bekomme ich z.B. ein A, möchte aber den hex - Wert 41

Das wäre doch in Ordnung, ob "A" oder 0x41 ist doch nur eine Frage der 
Interpretation des bytes. Falls du einen String/Character-Array "0x41\0" 
erwartest, mußt du die beiden Nibbles deines Return-Wertes noch in 
ASCII-Zeichen umsetzen.
Gast #2686714
Lesenswert?

Du möchtest also, dass Dir die Funktion einen String zurück liefert?!  - 
Das ist eher ungünstig. Wahrscheinlich wäre es einfacher dies dort 
anzusetzen, wo du den String benötigst....
Willst Du dir die 41 anzeigen lassen - oder wie kommst du darauf?
Gast #2686752
Lesenswert?

Sabine F. schrieb:
> geht das überhaubst?

Die Frage sollte nicht sein, ob das überhaupt geht, sondern ob das nötig 
ist. In einem Steuerbefehl (der dann zum Beispiel seriell ausgegeben 
wird) ist die Darstellung normalerweise völlig egal, da ASCII "A" und 
Hexadezimal 0x41 in der Bitdarstellung ja exakt gleich sind.
#2686761
Lesenswert?

Sabine F. schrieb:
> Sabine F. schrieb:
>
>> Wie wandle ich einen char - Wert in einen Hexwert um.
>> Möchte ihn nicht ausgeben, sondern es soll nur umgewandelt in
>> einer neuen Variable stehen.
> geht das überhaubst?
Da wird nichts umgewandelt. 'A' ist einfach nur eine andere Schreibweise 
für 0x41 oder 65 oder 01000001. Und zwar nur für dich, wenn du dein 
Programm schreibst. Im Speicher des Controllers steht immer 01000001.
Kein Computer weiss, was ein A ist.

mfg.
#2686779
Lesenswert?

Wenn du darauf hinaus willst, den AsciiCode von deinem Char in einen 
Hexadezimalen wert umzuschreiben, also das du den Tatsächlichen Hexwert 
bekommst, dann nimm den Char und Teile Ihn jeweils durch 16 und bei 
jeder Teilung, den Rest schreibst du dir auf. Das rückwärts gelesen ist 
dein Hexwert.

A hat den Ascii Code 65 (oder im Speicher 1000001), völlig egal

65 / 16 = 4  Rest 1
4 / 16 = 0   Rest 4


Rückwärts lesen: 41 (0x41)
#2687051
Lesenswert?

Sabine F. schrieb:
> Mike Mike schrieb:
>> 65 / 16 = 4  Rest 1
>> 4 / 16 = 0   Rest 4
>>
>>
>> Rückwärts lesen: 41 (0x41)
>
> Wie kann ich diese Berechnung in Code umsetzen?
>
> if(x%16 == 0) {
> x = x/16;
> }
> else {
> x = x/16 ?  ... wie mach ich das mit dem Rest

Lustig. Du fragst hier ...
   x%16 == 0
den Rest der Division ab, ob er 0 ist und 2 Zeilen weiter weißt du nicht 
wie man den Rest berechnet.  -> du brauchst ein C-Buch und musst es auch 
durcharbeiten.

uint8_t digit1 = x / 16;
uint8_t digit2 = x % 16;

  if( digit1 > 9 )
    digit1 += 'A' - 10;
  else
    digit1 += '0';

  if( digit2 > 9 )
    digit2 += 'A' - 10;
  else
    digit2 += '0';

Aber ich denke, wie die anderen, du bellst den falschen Baum an.
Bei einer binären Übertragung interessiert es nicht, dass ein Byte mit 
dem Wert 0x41 von einem Gerät welches ASCII Zeichen anzeigt als 'A' 
dargestellt wird. 'A' ist dasselbe wie 0x41, lediglich das Gerät welches 
dann ein Byte mit dem Wert 0x41 anzeigen soll, malt diejenigen Pixel 
schwarz an, so dass am Gerät die Ausgabe 'A' erscheint.

Und bei einer textuellen Ausgabe ist es eine reine Frage, welche 
Ausgabefunktion man zum Wandeln von Zahlen in textuelle Darstellung 
benutzt. Der schickst du das Byte 0x41 rein, und die Funktion schickt 
die beiden Zeichen '4' und '1' auf den Weg.

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