如何将此代码转换为c ++?

时间:2010-09-14 07:46:39

标签: c++ c printf

我有这段代码:

    string get_md5sum(unsigned char* md) {
        char buf[MD5_DIGEST_LENGTH + MD5_DIGEST_LENGTH];
        char *bptr;
        bptr = buf;
        for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
                bptr += sprintf(bptr, "%02x", md[i]);
        }
        bptr += '\0';
        string x(buf);
        return x;
}

不幸的是,这是一些C与一些C ++的结合。它确实编译,但我不喜欢printf和char *。我一直认为这在C ++中是不必要的,并且还有其他功能和类来实现这一点。但是,我并不完全理解这是怎么回事:

 bptr += sprintf(bptr, "%02x", md[i]);

因此我不知道如何将其转换为C ++。有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

sprintf返回写入的字节数。所以这个写入bptr两个字节(md[i]的值转换为%02x - &gt;这意味着十六进制,填充在2个字符上,左边是零),并增加{{1} }按字节数写入,因此它指向字符串的(bptr)结束。

我没有得到buf行,IMO应该是bptr += '\0';

在C ++中应该这样写:

*bptr = '\0';

编辑:更新了我的c ++答案

答案 1 :(得分:1)

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 );
}

答案 2 :(得分:0)

我不懂C ++,所以不使用指针和字符串和东西,这里有一个(几乎)伪代码:)

    for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
            buf[i*2] = hexdigits[(md[i] & 0xF0) >> 4];
            buf[i*2 + 1] = hexdigits[md[i] & 0x0F];
    }