2017-05-04 4 views
1

Ich bin vor ein paar Probleme, während ich toascii() verwenden Sie es für alle int zu ascii konvertiert, aber nicht < 10 int, Returens es \x1 oder \x2 und so, aber nicht das ascii-Symbol, das sollte es darstellen . Also bitte jede Hilfe. Mein CodeHex in c ascii Visual Studio

wie:

char* PostUnpack() 
{ 
    char* InStr = "04214FABF666DCE7"; 
    int Len = strlen(InStr); 
    int Count, OutCount = 0; 
    int IntToHex; 
    char HexToChr[3] = ""; 
    char TempCnv; 
    char RetStr[20] = "" ; 

    for(Count = 0; Count < Len; Count++) 
    { 
     strncpy(HexToChr,&InStr[Count],2); 
     IntToHex = (int) strtol(HexToChr, NULL, 16); 
     TempCnv = IntToHex; 
     toascii(TempCnv); 
     RetStr[OutCount] = TempCnv; 
     strncpy(HexToChr, "", strlen(HexToChr)); 
     Count++; 
     OutCount++; 
    } 
    return RetStr; 

tatsächlich in debug es sein:

!O«öfÜç 

weil ich will nicht zu drucken:

\x4!O«öfÜç 

während es sein sollte output, aber ich benutze den Rückgabewert von einer Verschlüsselungsmethode verwendet werden, und jetzt, wenn ich diese falsche Rückgabe va übergeben Lue es eine falsche Verschlüsselung.

+2

Was ist das Ergebnis, das Sie erwarten? – BLUEPIXY

+0

Die meisten von denen haben nicht einmal ein allgemein verwendetes Symbol. Ist es \ 0, \ b und \ t willst du? –

+0

Bitte Code und Ausgabe zeigen, damit wir Ihnen helfen können. – Badda

Antwort

1

Wie bereits erwähnt, kann eines der Probleme sein, dass toascii(), obwohl das Arbeiten wie vorgesehen, nicht seinen konvertierten Wert in der Art produziert, wie Sie erwarten. Sie müssen den Rückgabewert der Funktion verwenden, um den konvertierten Wert zu erhalten. Zum Beispiel, wie Sie es genannt haben:

toascii(TempCnv);//the converted value is returned, and you are not capturing it. 
^^^^ 

Verwendung entweder eine direkte Zuweisung der Wert wie folgt erfassen:

char c = toascii(0x51); //example value should produce ASCII character 3 

Oder können Sie die Zeichenfolge Funktion sprintf() verwenden, um die konvertierten zu platzieren Wert in eine Variable:

char c = 0; 
sprintf(c, "%c", toascii(0x51)); 

auch ist der Bereich der druckbaren ASCII-Zeichen 0x20 - 0x7E. Es ist ein Papier, das die Probleme diskutiert, die auftreten, wenn mit nicht-druckbare Zeichen here

-1

Es scheint der Punkt von toascii() zu sein, einen Wert auf die Verwendung von höchstens 7 Bits zu begrenzen, d.h. toascii(x) entspricht x &= 127. Dies ist möglicherweise nicht das, was Sie erwarten.

Weitere Informationen finden Sie unter the documentation.

+0

Da er nicht den Rückgabewert von toasiii überhaupt verwendet, ist das nicht wirklich wichtig. ;) – Gerhardh

0

heren einer Arbeit versucht, die

char * conv(char * str) 
{ 
    int l = strlen(str); 
    char buff[3]; 
    buff[2] = 0; 
    int oidx = 0; 
    char *out = malloc(l/2 + 1); 
     int i; 
    for(i = 0; i < l;) 
    { 
     buff[0]= str[i++]; 
     buff[1] = str[i++]; 
     long x = strtol(buff, 0,16); 
     out[oidx++] = x; 

    } 
    out[oidx] = 0; 
    return strdup(out); 
} 
int main(void) { 

    char* InStr = "04214FABF666DCE7"; 
    char* ans = conv(InStr); 
     free(ans); 
} 

arbeitet befaßt sich nicht mit ungerader Länge Eingang. Beachten Sie die Zuordnung des Rückgabepuffers und die Freigabe durch den Aufrufer. Und keine Überprüfung von malloc