2017-12-25 16 views
-5

auf eine alte Frage Nach Converting hex to string in C?C - Umwandlung von Hex-String

Die zugelassene Antwort schlägt sprintf zu verwenden, um jedes Hex-String zu konvertieren.

Ich habe zwei Fragen zu diesem Thema -

1) Wenn ich einen Hex habe wie 0a ich meine Zeichenfolge will 0a haben, aber nach der obigen Lösung wird das Ergebnis a hat.

2) Was mache ich hier falsch?

#include <stdio.h> 

int main(void) 
{ 
    unsigned char readingreg[10]; 
    readingreg[0] = 0x4a; 
    readingreg[1] = 0xab; 
    readingreg[2] = 0xab; 
    readingreg[3] = 0x0a; 
    readingreg[4] = 0x40; 
    unsigned char temp[10]; 
    int i = 0; 

    while (i < 5) 
    { 
     sprintf(temp + i, "%x", readingreg[i]); 
     i++; 
    } 
    printf("String: %s\n", temp); 
    return 0; 
} 

Die o/p scheint - String: 4aaa40

3) sowohl die beide Fragen kombinierend, ich möchte mein Ergebnis String 4aabab0a40

TIA

+2

'sprintf (Temp + 2 * i, "% 02x", readingreg [i]);' Und: 'unsigned char temp [10 + 1];' (Aber es ist besser, den Rückgabewert von sprintf() zu verwenden, oder: benutze auch snprintf()) – wildplasser

+2

1) Ist keine Frage. 3) ist keine Frage. 2) liegt außerhalb des Geltungsbereichs von SO. –

Antwort

1

Ihr Code hat mehrere Probleme.

Zuerst unsigned char temp[10]; sollte unsigned char temp[11]; sein, um einen String-Terminator zu enthalten.

Als nächstes ist die Formatspezifikation "%x" sollte "%02x" sein, also ist jeder Wert 2 Ziffern.

Dann temp + i sollte temp + i*2 sein, so dass jedes Ziffernpaar an der richtigen Stelle geschrieben wird.

korrigieren diese Fehler:

#include <stdio.h> 

int main(void) 
{ 
    unsigned char readingreg[10]; 
    readingreg[0] = 0x4a; 
    readingreg[1] = 0xab; 
    readingreg[2] = 0xab; 
    readingreg[3] = 0x0a; 
    readingreg[4] = 0x40; 
    unsigned char temp[11]; 
    int i = 0; 

    while (i < 5) 
    { 
     sprintf(temp + i*2, "%02x", readingreg[i]); 
     i++; 
    } 
    printf("String: %s\n", temp); 
    return 0; 
} 

Programmausgabe ist jetzt die erforderlichen

 
String: 4aabab0a40 
+0

Sind Arrays, die als künstliche Strings verwendet werden sollen, nicht der "Char" -Typ des Compilerstandards? – usr2564301

+0

@ usr2564301 Der Standard-'char'-Typ des Compilers ist möglicherweise nicht vorzeichenlos. Strings in C sind "make-believe", wenn Sie möchten, C hat keinen String-Typ. Sie sind Arrays mit einem Null-Terminator. –

+0

Es ist egal für OP-Code oder Ihre Antwort, aber immer noch :) Die üblichen Prototypen für String-Funktionen erwähnen nur "char", das heißt, sie * * * * den Compiler-Standard einhalten. Deshalb habe ich es als Warnung für OP erwähnt - eine manuelle Übersteuerung auf * entweder * "signiert" oder "unsigniert" kann Warnungen auslösen. – usr2564301