Konvertieren zwei Hexadezimale ASCII-Zeichen (Zwei ASCII-bytes) in einem byte
Ich konvertieren wollen zwei ASCII-bytes, um ein hexadezimal-byte.
zB.
0x30 0x43 => 0x0C , 0x34 0x46 => 0x4F
...
Den ASCII-bytes eine Zahl zwischen 0
und 9
oder einen Brief zwischen A
und F
(upper case), also zwischen 0x30
... 0x39
und 0x41
... 0x46
Weiß ich, wie "konstruieren" 0x4F
mit den zahlen 0x34
und 0x46 : 0x4F = 0x34 * 0x10 + 0x46
So, in der Tat, würde ich zum konvertieren einer ASCII-byte in hexadezimaler Wert.
Dafür, ich kann bauen und array zuweisen der Hexadezimalwert der ASCII-char :
0x30 => 0x00
0x31 => 0x01
...
0x46 => 0x0F
Aber vielleicht haben die meisten « die richtige » Lösung.
Wird das Programm auf einem AVR-µC und kompiliert wird mit avr-gcc
, so scanf()
/printf()
Lösungen sind nicht geeignet.
Habt Ihr da eine Idee ?
Dank
Was du (anscheinend!) tun möchten ist konvertieren ein paar bytes, die ein einzelnes byte von Interpretation die zwei bytes, die als ASCII-Symbole, die wiederum die hex-Ziffern darstellen, und mit den entsprechenden hexadezimalen Wert. Die Lösung diese Art von Fragen erfordert ein präzises Verständnis von dem, was Sie wirklich tun; und präzise Kommunikation hilft viel 🙂 Sie müssen sicher sein, Sie verstehen, grundlegend, was Daten ist. Wie David sagte, bytes sind bytes; es gibt keine ASCII-bytes oder hex-bytes.
ASCII-byte = byte repräsentieren einen ASCII-char-und hexadezimal-byte = byte-dargestellt in hexadezimal. Ich weiß, bytes sind bytes; ich weiß nur nicht, wie es zu erklären. Aber andere haben verstanden, was ich meinte. Ist das nicht das wichtigste?
InformationsquelleAutor Loïc G. | 2011-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
kann ich nicht machen, Gefühl für deine Beispiele, aber wenn Sie wollen, zu konvertieren einen string, der hexadezimale ascii-Zeichen in seine byte-Wert (z.B. der string "56" wird das byte 0x56, können Sie diese verwenden (vorausgesetzt Ihr system ist mit einer ASCII-Darstellung)
Würden Sie es verwenden, wie z.B.
"Und" res " (die sein müssen, mindestens die Hälfte der Länge des
in
parameter) enthält jetzt die 2 bytes 0x12,0x34Beachten Sie auch, dass dieser code braucht den hexadezimalen Buchstaben A-F, Hauptstadt, a-f nicht tun (und es macht keinen Fehler überprüfen - so werden Sie haben, um es zu übergeben gilt Zeug).
(in[i]|32)-'a'+10
und jetzt unterstützen Sie groß-und Kleinbuchstaben (mit nur eine weitere Anweisung in den Maschinencode, den meisten wahrscheinlich).Nicht
uint8_t
ein byte? Sollte man das nichtuint16_t
wenn es enthalten soll, zwei bytes?Velthuis Es soll ein byte, da es enthält 1 byte, nicht 2
ja, ich sehe, es ist ein array von uint8_t. Gehirn Furz, sorry.
Stellen Sie sicher, dass cytpe.h
InformationsquelleAutor nos
Können Sie
strtol()
, die Teil der avr-libc, oder Sie können schreiben Sie einfach Ihren konkreten Fall ziemlich einfach:Unter linux kann man immer tun man ascii.
Es war ein Witz ? : $ man ascii Aucune entrée de manuel pour ascii
Nein, Sie müssen fehlende Handbuch-Seite. Hier ist die englische version: linux.die.net/man/7/ascii
InformationsquelleAutor Carl Norum
Aufgabe:
Konvertiert einen string, der hexadezimale ascii-Zeichen in seine byte-Werte
also ascii -
"FF"
wird0xFF
- und ascii -"10" (x31x30x00)
wird0x10
//das Endergebnis sollte sein:
//1. Ersten Schritt: konvertieren asciiString, so enthält es groß-Fällen nur:
verwenden:
//2. Konvertiert einen string, der hexadezimale ascii-Zeichen in seine byte-Werte:
//3. Ergebnis drucken:
//Nutzung:
//4. Das Ergebnis sollte sein:
0xAA 0xAA 0xFF 0x12
//5. Dies ist das test-Programm:
InformationsquelleAutor sg7
Es funktioniert, könnte aber viel optimiert !
InformationsquelleAutor Dmitry