2011-01-22 302 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 
}