我有一个创建二进制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次。我怎么能避免它?
答案 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';