{"id":670,"date":"2023-03-23T14:34:54","date_gmt":"2023-03-23T06:34:54","guid":{"rendered":"http:\/\/www.inhhh.com\/blog\/?p=670"},"modified":"2023-03-23T14:34:54","modified_gmt":"2023-03-23T06:34:54","slug":"c%e5%ad%97%e7%ac%a6%e6%95%b0%e5%ad%97%e7%9a%84%e7%bc%96%e7%a0%81encode%e4%b8%8e%e8%a7%a3%e7%a0%81decode","status":"publish","type":"post","link":"http:\/\/www.inhhh.com\/blog\/?p=670","title":{"rendered":"C++\u5b57\u7b26\u6570\u5b57\u7684\u7f16\u7801(Encode)\u4e0e\u89e3\u7801(Decode)"},"content":{"rendered":"\n<p>\u5728\u65e5\u5e38\u5e94\u7528\u4e2d\uff0c\u6211\u4eec\u5e38\u7528\u7ed3\u6784\u4f53\u6216\u8005\u7c7b\u6765\u5b58\u50a8\u4e00\u6761\u4fe1\u606f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u5f88\u65b9\u4fbf\uff0c\u4f46\u662f\u4e0d\u5229\u4e8e\u6570\u636e\u7684\u4f20\u8f93\u3002\u4f8b\u5982\u5728\u7f51\u7edc\u7f16\u7a0b\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5c06\u7ed3\u6784\u4e2d\u7684\u6570\u636e\u8f6c\u5316\u4e3a\u5b57\u8282\u6d41\u624d\u80fd\u8fdb\u884c\u4f20\u8f93\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528memcpy\u5f3a\u884c\u5c06\u7ed3\u6784\u5316\u7684\u6570\u636e\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32\uff0c\u5728\u63a5\u6536\u65b9\u4ee5\u540c\u6837\u7684\u65b9\u5f0f\u8f6c\u5316\u4e3a\u6765\u3002\u6b64\u6cd5\u7b80\u5355\u6613\u7528\uff0c\u4f46\u662f\u7531\u4e8e\u7ed3\u6784\u5316\u7684\u6570\u636e\u6d89\u53ca\u5230\u5b57\u7b26\u5bf9\u9f50\u7684\u95ee\u9898\uff0c\u8fd9\u79cd\u65b9\u6cd5\u4f1a\u9020\u6210\u989d\u5916\u7684\u6570\u636e\u5f00\u9500\uff0c\u6240\u4ee5\u6211\u4eec\u6700\u597d\u81ea\u5df1\u624b\u52a8\u5bf9\u7ed3\u6784\u5316\u7684\u6570\u636e\u8fdb\u884c\u7f16\u7801\uff0c\u5f53\u7136\u8fd9\u79cd\u65b9\u6cd5\u4e5f\u6709\u5f0a\u7aef\uff0c\u867d\u7136\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u8282\u7701\u4e86\u4f20\u8f93\u6d41\u91cf\uff0c\u4f46\u7ed3\u6784\u4e2d\u7684\u5b57\u6bb5\u5f88\u591a\u65f6\uff0c\u4ee3\u7801\u91cf\u4f1a\u589e\u5927\uff0c\u6700\u597d\u7f16\u5199\u5de5\u5177\u81ea\u52a8\u751f\u6210\u4e00\u4e9b\u4ee3\u7801\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream>\r\n #include &lt;memory.h>\r\n #include &lt;string.h>\r\n using namespace std;\r\n \r\n #define ENCODE(buf, size, offset, data)\\\r\n     if ((NULL == buf) || ( == size))\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     if (offset + sizeof(data) > size)\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     {\\\r\n     uint8_t *p = (uint8_t*)buf;\\\r\n     p=p+offset; \\\r\n     memcpy(p,&amp;data,sizeof(data)); \\\r\n     offset = offset + sizeof(data); \\\r\n     }\r\n \r\n #define DECODE(buf, size, offset, data)\\\r\n     if ((NULL == buf) || ( == size))\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     if (offset + sizeof(data) > size)\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     {\\\r\n     uint8_t *p = (uint8_t*)buf;\\\r\n     p=p+offset; \\\r\n     memcpy(&amp;data,p,sizeof(data)); \\\r\n     offset = offset + sizeof(data); \\\r\n     }\r\n \r\n #define ENCODE_STR(buf, size, offset, data, length)\\\r\n     if ((NULL == buf) || ( == size) || ( >= length) )\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     if (offset + length > size)\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     {\\\r\n     uint8_t *p = (uint8_t*)buf;\\\r\n     p=p+offset; \\\r\n     memcpy(p,data,length); \\\r\n     offset = offset+ length; \\\r\n     }\r\n \r\n #define DECODE_STR(buf, size, offset, data, length)\\\r\n     if ((NULL == buf) || ( == size) || ( >= length) )\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     if (offset + length > size)\\\r\n     {\\\r\n     return -;\\\r\n     }\\\r\n     {\\\r\n     uint8_t *p = (uint8_t*)buf;\\\r\n     p=p+offset; \\\r\n     memcpy(data,p,length); \\\r\n     offset = offset+ length; \\\r\n     }\r\n \r\n enum{\r\n     enmMaxMsgLength = ,\r\n     enmMaxNameLength =\r\n };\r\n \r\n class Msg{\r\n     int iAge;\r\n     char szName&#91;enmMaxNameLength];\r\n     double dScore;\r\n public:\r\n     Msg()\r\n     {\r\n \r\n     }\r\n     Msg(int age,const char* name,double score):iAge(age),dScore(score)\r\n     {\r\n         strcpy(szName,name);\r\n     }\r\n     virtual ~Msg(){}\r\n     virtual int encode(char *buf)\r\n     {\r\n         size_t offset = ;\r\n         memset(buf,'',enmMaxMsgLength);\r\n         ENCODE(buf,enmMaxMsgLength,offset,iAge);\r\n         ENCODE_STR(buf,enmMaxMsgLength,offset,szName,enmMaxNameLength);\r\n         ENCODE(buf,enmMaxMsgLength,offset,dScore);\r\n         return offset;\r\n     };\r\n     virtual int decode(char *buf,size_t bufSize)\r\n     {\r\n         size_t offset = ;\r\n         DECODE(buf,bufSize,offset,iAge);\r\n         DECODE_STR(buf,bufSize,offset,szName,enmMaxNameLength);\r\n         DECODE(buf,bufSize,offset,dScore);\r\n         return offset;\r\n     }\r\n     void display()\r\n     {\r\n         cout&lt;&lt;iAge&lt;&lt;\" \"&lt;&lt;szName&lt;&lt;\" \"&lt;&lt;dScore&lt;&lt;endl;\r\n     }\r\n };\r\n \r\n int main(int argc, char* argv&#91;])\r\n {\r\n     size_t offset = ;\r\n     char buf&#91;enmMaxMsgLength],*recv = NULL;\r\n     Msg msg(,\"hwllo world\",23.69),msg1;\r\n     msg.display();\r\n     offset = msg.encode(buf);\r\n     cout&lt;&lt;offset&lt;&lt;endl;\r\n     cout&lt;&lt;sizeof(Msg)&lt;&lt;endl;\r\n     recv = new char&#91;offset];\r\n     memcpy(recv,buf,offset);\r\n     msg1.decode(recv,offset);\r\n     msg1.display();\r\n     return ;\r\n }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u65e5\u5e38\u5e94\u7528\u4e2d\uff0c\u6211\u4eec\u5e38\u7528\u7ed3\u6784\u4f53\u6216\u8005\u7c7b\u6765\u5b58\u50a8\u4e00\u6761\u4fe1\u606f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u5f88\u65b9\u4fbf\uff0c\u4f46\u662f\u4e0d\u5229\u4e8e\u6570\u636e\u7684\u4f20\u8f93\u3002\u4f8b\u5982\u5728\u7f51\u7edc\u7f16\u7a0b\u4e2d\uff0c\u6211\u4eec<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"http:\/\/www.inhhh.com\/blog\/?p=670\" class=\"link-btn theme-btn\"><span>Read More <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-670","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=670"}],"version-history":[{"count":1,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/670\/revisions"}],"predecessor-version":[{"id":671,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/670\/revisions\/671"}],"wp:attachment":[{"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=670"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.inhhh.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}