bptr += sprintf(bptr, "%02x", md[i]);
Это печать символа в md [i] как 2 шестнадцатеричных символа в буфер и продвижение указателя буфера на 2. Таким образом, цикл выводит шестнадцатеричную форму MD5.
bptr+ = '\ 0';
Эта строка, вероятно, не делает то, что вы хотите ... она добавляет 0 к указателю, возвращая вам тот же указатель ...
Я быреализовать это примерно так.
string get_md5sum(unsigned char* md) {
static const char[] hexdigits="0123456789ABCDEF";
char buf[ 2*MD5_DIGEST_LENGTH ];
for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
bptr[2*i+0] = hexdigits[ md[i] / 16 ];
bptr[2*i+1] = hexdigits[ md[i] % 16 ];
}
return string(buf,2*MD5_DIGEST_LENGTH );
}