XX just a name ~
已知條件: 1. 有個(gè)很煩的客戶
????????????????????? 2. 那個(gè)很煩的客戶說“你發(fā)送過來的報(bào)文,必須全是可見字符”
??????????????????????3. 那個(gè)很煩的客戶又說“你每次發(fā)送過來的報(bào)文,必須包含的信息有 字段名 與 字段值”
????????????????????? 4. 那個(gè)很煩的客戶還說“字段名 與 字段值 必須在一個(gè)報(bào)文同時(shí)發(fā)送過來,不要分成兩個(gè)報(bào)文”
????????????????????? 5. 那個(gè)很煩的客戶最后說“你不能限制我不使用某個(gè)可見字符,更不要試圖來說服我”
本來報(bào)文想struct,? 二進(jìn)制,搞兩個(gè) int 成員,? 由于 (已知條件1)杯具了
于是只能用字符串了,但由于 (已知條件3) 的緣故,我說“能不能把 字段名 和 字段值分開兩個(gè)報(bào)文,然后梅花間竹地發(fā)過去?”,由于 (已知條件4) 又杯具了
后來想想,一個(gè)字符串的報(bào)文包含 字段名與字段值也沒問題啊, 但你不能使用分號(hào),因?yàn)槲蚁胗盟鼇碜鳛榉指舴炎侄蚊c字段值區(qū)分開來,由于 (已知條件5),我不想活了
后來經(jīng)某位有經(jīng)驗(yàn)的人士的啟發(fā),參考了 URL編碼
解決方法:就是使用 XX Encoding 了
兩個(gè)轉(zhuǎn)義字符
??? \? ->? \b
???:??? -> \c
具體代碼如下:
std::string?MakeString(std::string?strField,?std::string?strValue)
{
????replace_all(strField,?"\\",?"\\b");
????replace_all(strField,?":",??"\\c");
????replace_all(strValue,?"\\",?"\\b");
????replace_all(strValue,?":",??"\\c");
????return?strField?+?":"?+?strValue;
}
void?DivideString(std::string?strSrc,?std::string&?strField,?std::string&?strValue)
{
????size_t?pos?=?strSrc.find(":",?0);
????strField?=?strSrc.substr(0,?pos);
????strValue?=?strSrc.substr(pos?+?strlen(":"),?strSrc.length()?-?pos?-?strlen(":")?);
????replace_all(strField,?"\\b",?"\\");
????replace_all(strField,?"\\c",??":");
????replace_all(strValue,?"\\b",?"\\");
????replace_all(strValue,?"\\c",??":");
}
好困,下午還要陪人逛街!!!!!!!!!睡覺去~