Konvertieren von Ascii-Zahl in Hex in C
Verwende ich folgende Funktion zum konvertieren eines Werts in hex zu ASCII:
void hex_to_ascii(unsigned char* buf, unsigned char number)
{
int i;
sprintf( buf, "%03d", number );
printf("\nNumber in Ascii: ");
for( i=0; i< 3; i++)
printf("%#04x ", *(buf+i));
printf("\n");
return;
}
Wenn z.B. der hex-Wert ist 0xff
erzeugt die Funktion 0x32 0x35 0x35
was ist die Ascii-Darstellung von 255
.
Nun möchte ich den Vorgang umkehren. Ich möchte eine Funktion, die übergeben werden können, werden drei bytes (array, 3), die zum generieren der hex-Wert.
d.h. Wir übergeben 0x32 0x35 0x34
und es erzeugt 0xFE.
Können Sie mir bitte helfen mit diesem? Es ist für ein eingebettetes system, die Werte werden nicht eingegeben sind Sie erhalten aus einer comms Puffer.
Vielen Dank.
EDIT:
Schrieb ich dies und es scheint zu funktionieren..
unsigned char ascii_to_hex(unsigned char* buf)
{
unsigned char hundred, ten, unit, value;
hundred = (*buf-0x30)*100;
ten = (*(buf + 1)-0x30)*10;
unit = *(buf+2)-0x30;
value = (hundred + ten + unit);
printf("\nValue: %#04x \n", value);
return value;
}
Dank an alle für die Antworten.
- Können Sie überprüfen, Konvertieren in ASCII-Zeichenkette aus hex-String in C und dies, SO Frage
number
ist nicht eine "hex-Wert", es ist einchar
, also eine Ganzzahl. Es ist egal, ob Sie anrufenhex_to_ascii(buffer, 0xFF)
,hex_to_ascii(buffer, 255)
oderhex_to_ascii(buffer, 0377)
- Sie sind alle gleich. Der umgekehrte Vorgang istscanf
.
InformationsquelleAutor user3065932 | 2013-12-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie stdlib die atoi () - Funktion zum konvertieren einer Zeichenfolge in eine ganze Zahl:
können Sie dann printf (), die Ganzzahl als hex/Dez oder was auch immer.
Falls dies zu einfach für Ihre Bedürfnisse, dann eine leistungsfähigere alternative ist die Verwendung von sscanf()
Wenn Sie diese integer-Zeichenfolgen aus einer comms Puffer dann werden Sie wahrscheinlich wollen, teilen Sie die Puffer in getrennten zahlen erste (vielleicht sind Sie durch Leerzeichen voneinander getrennt, zum Beispiel). Ein einfacher Weg, dies zu tun, in C wäre die Verwendung von strtok().
BEARBEITEN:
dieser edit ist in Reaktion auf den code, den Sie Hinzugefügt haben, zu Ihrer Frage. Ich kann nicht kommentieren auf Ihre Frage, da ich nicht genug ansehen!
Der code, den Sie Hinzugefügt haben, ist gebrochen. Es wird nur funktionieren, wenn eine drei-stellige Zeichenfolge, z.B. "001", "255". Wenn eine unterschiedliche Anzahl von Ziffern vorgesehen sind, es zu Lesen über das Ende der saite und erzeugen Müll-Ausgang, versuchen Sie "1" oder "14" oder "12314".
atoi()
bietet keine ausreichende Fehlerbehandlung. Sie könnenstrtol()
statt, der auchsscanf()
.Müssen Sie erstellen eine Reihe in base10, wenn man bedenkt Sie haben alle Ziffern gespeichert in
char*buf
etwa so: