2013-10-15 67 views
3

我需要將輸出printf("%02X", buffer[0])放入一個字符串中。這是一種將printf的輸出設置爲字符串的方法嗎?

理論上它會是這樣的:

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

然而,這不工作,我無法弄清楚如何做到這一點。

任何幫助表示讚賞,謝謝。

+4

'printf'是一個C函數,它解釋了爲什麼它與C++字符串混合得很差。 – MSalters

回答

11

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

爲M M.寫道: sprintf是你正在尋找的。或者更好的是,使用snprintf爲增加安全性對緩衝區溢出:

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

的snprintf永遠不會寫超過SIZE字節爲s以上。

0

我發現boost :: format()是在輸出到流時保留printf()類型格式的好方法。一旦你使用了一個流,你可以使用std :: ostringstream或者類似於內存中的格式。

相關問題