2011-01-22 298 views
2

我想將一個數組轉換爲十六進制,然後將其放入一個字符串變量。在下面的循環中,printf工作正常,但我無法正確使用sprintf。我如何將十六進制值填充到ASCII數組中?使用'sprintf'將十六進制轉換爲字符串

static unsigned char digest[16]; 
static unsigned char hex_tmp[16]; 

for (i = 0; i < 16; i++) { 
    printf("%02x",digest[i]); <--- WORKS 
    sprintf(&hex_tmp[i], "%02x", digest[i]); <--- DOES NOT WORK! 
} 
+6

「不工作」是一個很糟糕的錯誤描述。它會崩潰嗎?它會給編譯錯誤嗎?它是否給出了錯誤但意想不到的結果?什麼意外的結果?你會期望什麼呢? – sth 2011-01-22 21:28:02

+0

你的問題的部分答案在這裏:什麼是(16 * 2)+ 1?你的循環從0運行到??。那有多少次迭代? – JimR 2011-01-22 21:46:10

回答

9

也許你需要:

&hex_tmp[i * 2] 

,也是一個更大的陣列。

-2

存儲爲數字一個字符是不一樣的字符串:

unsigned char i = 255; 
unsigned char* str = "FF"; 
unsigned char arr1[] = { 'F', 'F', '\0' }; 
unsigned char arr2[] = { 70, 70, 0 }; 
8
static unsigned char digest[16]; 
static char hex_tmp[33]; 

for (i = 0; i < 16; i++) { 
    printf("%02x",digest[i]); <--- WORKS 
    sprintf(&hex_tmp[i*2],"%02x", digest[i]); <--- WORKS NOW 
}