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
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.
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?
Muss die 41 einem Steuerbefehl mitgeben, deshalb kann ich mit dem A nichts anfangen.
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.
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?
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.
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.
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)
Mit C kannst du aber deine Variable direkt als Hex Wert ausgeben, indem du statt %i einfach %x nimmst
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
Sabine F. schrieb: > Wie kann ich diese Berechnung in Code umsetzen? Ich glaube, so wird das nichts.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.