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

ein*_*ude 2 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;
Run Code Online (Sandbox Code Playgroud)

这称为sprintf 20次.我怎么能避免呢?

Ker*_* SB 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';
Run Code Online (Sandbox Code Playgroud)