这是将printf的输出设置为字符串的方法吗?

时间:2013-10-15 13:14:17

标签: c++ printf

我需要将printf("%02X", buffer[0])的输出放入字符串中。

理论上它会是这样的:

string str = printf("%02X", buffer[0]) +printf("%02X", buffer[1]) +printf("%02X", buffer[2]) +printf("%02X", buffer[3]);

然而,这不起作用,我无法弄清楚如何去做。

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:12)

printf的返回值是写入的字符数,请使用snprintf

char s[BIG_ENOUGH];

snprintf(s, BIG_ENOUGH, "%02X %02X %02X %02X ", buffer[0],
                                                buffer[1],
                                                buffer[2],
                                                buffer[3]);

std::string str(s);

此外,您可以忘记xprintf方式并使用C ++流:

std::ostringstream s;

s << std::hex;

for (int i=0; i<4; i++)
    s << std::setfill('0') << std::setw(2) << buffer[i] << ' ';

std::string str(s.str());

答案 1 :(得分:1)

正如M M.所写,sprintf正是你所寻找的。或者更好的是,使用snprintf增加安全性以防止缓冲区溢出:

char s[SIZE];
snprintf(s, SIZE, "%02X", buffer[0]);
string str(s);

snprintf永远不会将超过SIZE字节写入s。

答案 2 :(得分:0)

我发现boost :: format()是一种在输出到流时保留printf()类型格式的好方法。一旦使用了流,就可以使用std :: ostringstream或类似于内存中的格式。