2017-05-04 33 views
1

我遇到了一些問題,而我用toascii()其轉換任何INT爲ASCII在C ASCII,但不是int < 10,它returens \x1\x2等,但不是ASCII符號,它應該代表。所以,請任何幫助。六角使用Visual Studio的

我的代碼是這樣的:

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; 

實際上並調試如:

\x4!O«öfÜç 

,而應該是:

!O«öfÜç 

,因爲我不想打印輸出,但我使用返回值被一些加密方法使用,現在當我通過這個不正確的返回VA假使它做出不正確的加密。

+2

什麼是你所期望的結果? – BLUEPIXY

+0

大多數人甚至沒有一個常用的符號。它是\ 0,\ b並且你想要嗎? –

+0

請顯示代碼和輸出,以便我們可以幫助您。 – Badda

回答

1

前面已經指出的那樣,問題之一可能是toascii(),雖然按照設計的工作,是不是可以生產它的方式轉換值是否符合預期。您必須使用該函數的返回值來獲取轉換值。例如,你可以把它叫做:

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

既可以使用直接賦值語句捕捉到這樣的值:

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

或者您可以使用字符串函數sprintf()放置轉換值轉換爲變量:

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

此外,可打印ASCII字符的範圍是0x20 - 0x7E。還有就是討論正試圖與非打印字符here

-1

看起來toascii()的要點是將一個值限制爲使用至多7位,即toascii(x)等於x &= 127。這可能不是你所期望的。

詳見the documentation

+0

因爲他根本不使用'toascii'的返回值,所以這並不重要。 ;) – Gerhardh

0

繼承人一個工程

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); 
} 

不奇怪長度的輸入處理工作時所遇到的問題的論文。注意返回緩衝區的分配以及由調用者釋放。而沒有的malloc檢查