SHA1哈希二进制(20)到字符串(41)

时间:2011-09-22 20:24:49

标签: c

我有一个创建二进制sha1的函数,但是我需要一个40字节字符串的结果(对于null-t为+1)​​。 是否有更好的方法将其转换为字符串,而不是这个?

unsigned char hash_binary[20] = "\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01";
char hash_string[41];
int i;

for(i = 0;i < 20; i++)
    sprintf( hash_string + i*2, "%02X", hash_binary[i] );

hash_string[40] = 0;

这称为sprintf 20次。我怎么能避免它?

1 个答案:

答案 0 :(得分:7)

您可以直接填充目标字符串:

static const char alphabet[] = "0123456789ABCDEF";

for (int i = 0; i != 20; ++i)
{
  hash_string[2*i]     = alphabet[hash_binary[i] / 16];
  hash_string[2*i + 1] = alphabet[hash_binary[i] % 16];
}
hash_string[40] = '\0';