SHA1 двоичный хэш (20) в строку (41) - PullRequest
2 голосов
/ 23 сентября 2011

У меня есть функция, которая создает двоичный файл sha1, но мне нужен результат в виде 40-байтовой строки (+1 для null-t). Есть ли лучший способ преобразования его в строку, чем этот?

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 Ответ

7 голосов
/ 23 сентября 2011

Вы можете заполнить целевую строку напрямую:

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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...