Ich habe eine Frage, die ich nicht lösen konnte, aber sie schien trivial. Ich erhalte einen Zeichenstrom von einem Prozessor über UART und dieser Strom stellt eine JPEG-Datei dar.
Ich habe diesen Stream als file.txt aufgenommen und kann ihn (sagen wir) in Notepad öffnen und FFD8 sehen ... viele Daten ... FFD9. FFD8 und FFD9 sind JPEG-Start-of-Image- und -Ende-of-Image-Codes, und die Daten dazwischen sind vermutlich das JPEG-Bild. Ich möchte dieses Bild anzeigen, aber das Problem ist, dass diese Daten HEX-Zeichen darstellen (z. B. FFD8), aber da es sich um eine Textdatei handelt, handelt es sich eigentlich nur um ASCII, und daher kann ich sie nicht als JPEG öffnen.
Gibt es ein Programm oder ein Dienstprogramm, mit dem ich diese Datei, die "ASCII HEX" enthält, in eine echte Binärdatei konvertieren kann, damit ich sie als JPEG-Datei anzeigen kann?
Danke!
Zuerst benötigen Sie eine kurze Unterroutine, um jedes Hex-4-Bit-Nibble in Binärwerte umzuwandeln, und speichern Sie dann die Nibbles als 8-Bit-Binärwerte.
unsigned char hextobin (unsigned char digit)
{
unsigned char value;
if ((toupper(digit) >= 'A')&&(toupper(digit) <= 'F'))
{
value = (digit - 'A') + 10;
}
else if ((digit >= '0') && (digit <= '9'))
{
value = digit - '0';
}
else
{
value = 255; // error - not handling this below
}
return value;
}
Rufen Sie dann für jeweils zwei Hexadezimalzeichen die obige Routine zweimal auf; Wenn Sie sie beispielsweise in einer Schleife eingeben, etwa so:
unsigned char nibble1, nibble2, byte;
// assume inside a loop getting a characters from UART
{
nibble1 = gethexchar(); // ssume gets one ASCII char 0-9 or A-F
nibble2 = gethexchar();
byte = 256 * hextobin(nibble1) + hextobin(nibble2);
// can save byte off to buffer or write to file
}
Ich habe einen einfachen Weg gefunden, dies zu tun, obwohl die obige Antwort von tcrosley auch richtig ist.
Mein Weg bestand darin, den Code auf dem Mikroprozessor zu ändern, um die Daten mit einem %c-Formatbezeichner anstelle des ursprünglich verwendeten %x-Formatbezeichners auszugeben.
Dann erfasse ich die Daten mit RealTerm in einer Datei.
Dann öffne ich die Datei mit einem HEX-Editor (hexplorer), um zu überprüfen, ob sie mit FFD8 beginnt und mit FFD9 endet (normalerweise muss ich einige Zeichen am Ende der Datei löschen, dies wird hinzugefügt, weil die Firmware die Datei sendet).
Dann benenne ich die Datei in die Erweiterung jpg um und sie kann mit jeder Bildbetrachtungssoftware geöffnet werden.
Danke für die Hilfe an alle!
Oleg Masurow
Nick Alexejew
KyranF
IgorEE