2017-09-14 121 views
0

如何將字符串轉換爲十六進制,反之亦然c。例如:,像「謝謝」字符串以十六進制格式:7468616e6b20796f75並從十六進制7468616e6b20796f75到字符串:「謝謝」。有沒有辦法做到這一點?如何將字符串轉換爲十六進制,反之亦然c?

在此先感謝

+0

使用'的sprintf()'/'的sscanf()'一個循環中。 –

回答

1

sprintfsscanf是這種不夠好。

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char text[] = "thank you"; 
    int len = strlen(text); 

    char hex[100], string[50]; 

    // Convert text to hex. 
    for (int i = 0, j = 0; i < len; ++i, j += 2) 
    sprintf(hex + j, "%02x", text[i] & 0xff); 

    printf("'%s' in hex is %s.\n", text, hex); 

    // Convert the hex back to a string. 
    len = strlen(hex); 
    for (int i = 0, j = 0; j < len; ++i, j += 2) { 
    int val[1]; 
    sscanf(hex + j, "%2x", val); 
    string[i] = val[0]; 
    string[i + 1] = '\0'; 
    } 

    printf("%s as a string is '%s'.\n", hex, string); 

    return 0; 
} 

現在

$ ./a.out 
'thank you' in hex is 7468616e6b20796f75. 
7468616e6b20796f75 as a string is 'thank you'. 
+0

我想通過傳遞一個十六進制字符串並將其解碼爲字符串來創建一個aes解密腳本。是否有任何解密腳本可以運行,你知道嗎? –

+0

這個答案假設一個ASCII(或兼容)字符集。無可否認,這在實踐中很常見,但它不是C標準所要求的。 – Peter

+0

如果'text [i] <0','sprintf(hex + j,「%02x」,text [i]);'是一個問題。更好地保證只有非負值通過。代碼缺乏邊界檢查 - 但確實說明了總體思路。 – chux

相關問題