1.遇到的問題
最近項目在做去Qt化,沒辦法,Qt確實好用,但是要安裝qt庫,爲了和各個現場的環境一致,只能用原汁原味的C了。
QT拼接字符串:
QString qstrDevPoint = QString("{TYPE:%1CONTENT:%2,COMPRESS,").arg(COM_FUNC_MSG_8).arg(g_pFeAcess->m_facName.c_str());
qstrDevPoint += QString("%1,%2,%3;").arg(info.offset).arg(info.var.un.uch).arg(info.var.time1.tv_sec);
這裏面有個參數info.var.un.uch
是char類型,剛開始用C++的string拼接的時候,找了好半天不知道char怎麼轉string。就直接拼在後面了,
string qstrDevPoint = "{TYPE:";
qstrDevPoint += to_string(COM_FUNC_MSG_8);
qstrDevPoint += "CONTENT:";
qstrDevPoint += g_pFeAcess->m_facName;
qstrDevPoint += ",COMPRESS,";
.....
qstrDevPoint += info.var.un.uch;//char
結果是令我出乎意料的"\000"
,正常輸出應該爲"0"
。找了好多資料,用過網上說的stringstream
,無用;其他還有更麻煩的方法,就不說了,沒有一個成功的。
2.意外的驚喜
前不久剛接觸的字符串處理函數,裏面有個to_string()
,我一看,參數裏面沒有char型啊,當時也是被網上的說法給帶偏了,腦子亂了,一直在用to_string,但是剛碰到char型,就把這茬給忘了。
最後真的是沒辦法了,抱着試試看的心態,用了to_string
qstrDevPoint += to_string(info.offset);//int
qstrDevPoint += ",";
qstrDevPoint += to_string(info.var.un.uch);//char -> string
qstrDevPoint += ",";
qstrDevPoint += to_string(info.var.time1.tv_sec);
qstrDevPoint += ";";
趕緊一試,看到結果是0時,真的是哭笑不得。雖然to_string沒有參數爲char的,但是char可以轉爲int,所以對char類型,也可以使用to_string方法轉爲string
。
3.結語
碼代碼呢,就是這樣,有時候被一個小問題折磨的頭疼。第一次遇到問題,也許會多走彎路,但是在解決問題的過程中,也會學到不少東西,這大概也正是編程的魅力所在。