Forum: Mikrocontroller und Digitale Elektronik char in hex anschreiben


von Sabine F. (Gast)


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

von Matthias (Gast)


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.

von Sabine F. (Gast)


Lesenswert?

return %x, x;  // funktiniert nicht

Wie haben Sie das gemeint?

von Fabian (Gast)


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?

von Sabine F. (Gast)


Lesenswert?

Muss die 41 einem Steuerbefehl mitgeben, deshalb kann ich mit dem A 
nichts anfangen.

von Sabine F. (Gast)


Lesenswert?

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.

von Sabine F. (Gast)


Lesenswert?

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?

von Klaus Dieter (Gast)


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.

von Thomas E. (thomase)


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.

von Mike M. (mikeii)


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)

von Mike M. (mikeii)


Lesenswert?

Mit C kannst du aber deine Variable direkt als Hex Wert ausgeben, indem 
du statt %i einfach %x nimmst

von Sabine F. (Gast)


Lesenswert?

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

von Klaus Dieter (Gast)


Lesenswert?

Sabine F. schrieb:
> Wie kann ich diese Berechnung in Code umsetzen?

Ich glaube, so wird das nichts.

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.