2012-03-25 9 views
0

zweite Antwort auf Frage Bezug: How to convert from ASCII to Hex and vice versa?C - Speicher hex Äquivalent Zeichen

ich den char hex gespeichert werden soll [3] Äquivalent von verschiedenen Zeichen wie folgt:

char *str ="abcd"; 

// I want to get hex[3] of each character in above string and save into the following: 

char str2[4]; // should contain hex values as : \x61 for a,\x62 for b,\x63 for c,\x64 for d 

Wie kann ich dies tun ?

Ich habe versucht, die folgenden bisher:

int i; 
char ch; 
char hex[3]; 
for(i=0; i<strlen(str);i++) { 
    ch = charToHex(*(str+i), hex); 
    // now hex contains the first and second hex characters in hex[0] & hex[1] 
    // I need to save them in the first index of str2 
    // e.g. if hex[0] = 7 and hex[1] = f, then str2[0] should be "\x7f" 

    // -> how do I do this part ? 

} 

Dank.

+7

Dies ist keine Schreib-für-mich-Code-für-mich-Site. Was hast du probiert? Wo steckst du fest? Beachten Sie auch, dass die Zeichenfolge '" \\ x61 "' wegen des Null-Terminators wahrscheinlich nicht in 'char [4]' passt. (Ich sage "wahrscheinlich", weil Sie ohne Null-Terminatoren arbeiten können, wenn Sie wollen, aber es ist peinlich, und ich vermute nicht, was Sie vorhatten.) –

+1

Die Antworten erscheinen nicht in einer festen Reihenfolge - die Reihenfolge hängt davon ab Upvotes und Downvotes - also ist "zweite Antwort" keine nützliche Beschreibung dessen, worauf Sie sich beziehen. Warum verlinken Sie nicht direkt zu der Antwort, die Sie im Sinn haben, indem Sie den "Link" -Link unten benutzen? – ruakh

+0

@MarceloCantos siehe aktualisierte Frage – Jake

Antwort

1

Sie können eine for loop verwenden, um alle Zeichen einer Zeichenfolge zu durchlaufen und dann die Konvertierung für jedes Zeichen anzuwenden. Beachten Sie, dass C-Strings null-terminated sind.

Beachten Sie auch, dass 4 Zeichen nicht ausreichen wird, wenn Sie \x61\x62\x63\x64 speichern möchten - Sie 4 * strlen(str) + 1 brauchen werden, dh 17.


Als Reaktion auf den Code:

Sie nicht tun eigentlich brauchen ch. Die function charToHex gibt void zurück, d.h. nichts.

Kopieren Sie einfach die Zeichen an den Ausgabe-String, wie folgt aus:

str2[2*i] = hex[0]; 
str2[2*i+1] = hex[1]; 

Auch hier nicht vergessen, die Nullabschluss in der Ergebnis-String zu setzen.

Da Sie in jeder Iteration auch strlen aufrufen, schreiben Sie eine Schlemiel the Painter algorithm.

+0

Ich habe deine Lösung versucht; Am Ende, wenn str2 mit printf ("% s", str2) gedruckt wird, druckt es 61626364. Jetzt ist meine Frage, die ich habe: char * str3 = "\ x61 \ x62 \ x63 \ x64", ist Dies ist das gleiche wie das Ergebnis, das wir erhalten haben, weil das Ziel ist, von str1 in str3 Format zu konvertieren. – Jake

+0

Nun, wenn Sie ein zusätzliches '\ x' wollen, können Sie einfach jedes vierte Zeichen auf" \\ "und jedes vierte Zeichen (beginnend mit dem zweiten) auf" x "setzen. Der Code bleibt gleich; Ersetzen Sie einfach '2 * i' durch' 4 * i'. – phihag

+0

Wird sich die Größe ändern? – Jake