日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pelco-d协议数据解析示例

發布時間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pelco-d协议数据解析示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pelco-d協議數據解析示例

286人閱讀 評論(0) 收藏 舉報 本文章已收錄于: 分類: 程序編程(12) 作者同類文章X
    代碼工人的倉庫(36) 作者同類文章X
      代碼生活(42) 作者同類文章X
        

        前段時間寫了有關pelco協議的一些筆記,后來,有個小模塊是接收pelco格式的數據,然后解析出是什么命令,于是又寫了個簡單的解析函數。這個函數沒什么技術含量。主要思路:

        1、逐字節解析,保證每一字節都處理到;
        2、找到0xff,此為命令頭;
        3、找到命令結束字符,方法是根據pelco命令組裝的算法,——其實就是當某一字節的值是前面幾個的校驗和就結束,有一點要校驗和正確但長度不符合pelco標準的情況,比如出現0x01,0x02,0x03,根據校驗方法是正確的,但它不是正確的命令,pelco文檔有提到命令都是7個字節的,但有的文檔的命令多于7字節,于是,統一用7字節或以上為判斷。
        4、結束,找到了一個命令。

        代碼如下:

        [cpp] view plaincopy print?
      • static?void?protocol_d(unsigned?char*?buffer,?int?len)??
      • {??
      • ????unsigned?char*?tmp?=?NULL;??
      • ????int?cksm?=?0;??
      • ????unsigned?char?ch?=?0;??
      • ????int?tmp_len?=?len;??
      • ??
      • ????int?cmd_len?=?0;??
      • ????unsigned?char*?cmd_ptr?=?NULL;??
      • ??
      • ????tmp?=?buffer;??
      • ??????
      • ????while?(tmp_len?>?0)??
      • ????{??
      • ????????while?(*tmp?!=?0xff)??
      • ????????{??
      • ????????????tmp++;??
      • ????????????tmp_len--;??
      • ????????????if?(tmp_len?<=?0)??
      • ????????????goto?end;??
      • ????????}??
      • ???
      • ????????cmd_ptr?=?tmp;???
      • ????????//?第一個字節??
      • ????????ch?=?*(++tmp);??
      • ????????cksm?+=?ch;??
      • ????????cmd_len?=?2;??
      • ????????tmp_len--;??
      • ??
      • ????????while?(tmp_len?>?0)??
      • ????????{??
      • ????????????ch?=?*(++tmp);??
      • ????????????cmd_len++;??
      • ????????????tmp_len--;??
      • ????????????if?(ch?==?cksm?&&?cmd_len?>=?7)??
      • ????????????{??
      • ????????????????dump_cmd(NULL,?cmd_ptr,?cmd_len);??
      • ????????????????//找到了命令,就可以做其它事情了。???
      • ????????????????cksm?=?0;??
      • ????????????????break;??
      • ????????????}??
      • ????????????cksm?+=?ch;??
      • ????????????cksm?%=?0x100;??
      • ????????}??
      • ??
      • end:??
      • ????????;??
      • ????}??
      • }??
      • static void protocol_d(unsigned char* buffer, int len) {unsigned char* tmp = NULL;int cksm = 0;unsigned char ch = 0;int tmp_len = len;int cmd_len = 0;unsigned char* cmd_ptr = NULL;tmp = buffer;while (tmp_len > 0){while (*tmp != 0xff){tmp++;tmp_len--;if (tmp_len <= 0)goto end;}cmd_ptr = tmp; // 第一個字節ch = *(++tmp);cksm += ch;cmd_len = 2;tmp_len--;while (tmp_len > 0){ch = *(++tmp);cmd_len++;tmp_len--;if (ch == cksm && cmd_len >= 7){dump_cmd(NULL, cmd_ptr, cmd_len);//找到了命令,就可以做其它事情了。 cksm = 0;break;}cksm += ch;cksm %= 0x100;}end:;} }


        測試代碼如下,特意加了些干擾的字符。

        [cpp] view plaincopy print?
      • int?serial_simple_test()??
      • {??
      • #define?LEN?(5*7+2+2+2+3)??
      • ????unsigned?char?buffer[LEN]?=?{??
      • ????0x11,?0x8,?0xff,?0x01,?0x00,?0x08,?0x00,?0x01,?0x0a,???
      • ????0xff,?0x01,?0x00,?0x08,?0x00,?0x02,?0x0b,?0x9,??
      • ????0xff,?0x01,?0x00,?0x00,?0x00,?0x00,?0x01,??
      • ????0xff,?0x01,?0x00,?0x0c,?0x0d,?0x08,?0x22,0x9,??
      • ????0xff,?0x01,?0x00,?0x01,?0x01,?0x03,?0x6,?0x01,?0x05,???
      • ????};??
      • ????protocol_d(buffer,?LEN);??
      • ????return?0;??
      • }??
      • int serial_simple_test() { #define LEN (5*7+2+2+2+3)unsigned char buffer[LEN] = {0x11, 0x8, 0xff, 0x01, 0x00, 0x08, 0x00, 0x01, 0x0a, 0xff, 0x01, 0x00, 0x08, 0x00, 0x02, 0x0b, 0x9,0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,0xff, 0x01, 0x00, 0x0c, 0x0d, 0x08, 0x22,0x9,0xff, 0x01, 0x00, 0x01, 0x01, 0x03, 0x6, 0x01, 0x05, };protocol_d(buffer, LEN);return 0; }


        李遲記于2014年8月14日

        0
        0

        我的同類文章

        程序編程(12) 代碼工人的倉庫(36) 代碼生活(42) http://blog.csdn.net
        • ?GCC編譯警告選項的學習2015-12-11閱讀95
        • ?gcc較高版本的一些編譯警告收集2015-05-06閱讀436
        • ?遇到一個日志文件變化帶來的文件句柄問題2015-01-25閱讀199
        • ?遇到一個gcc編譯器版本導致的運行結果有差異的問題2015-01-17閱讀236
        • ?pelco協議及其實現的簡單認識2014-07-03閱讀342
        • ?一個可變參數類型檢查的示例2015-05-06閱讀140
        • ?參考ethtool寫了個Linux設置、獲取網卡模式的接口2015-03-30閱讀294
        • ?再記一下sscanf的一個小問題2015-01-18閱讀237
        • ?初識PCI2015-02-09閱讀200
        • ?visca協議及其實現的簡單認識2014-06-30閱讀768
        更多文章

        總結

        以上是生活随笔為你收集整理的pelco-d协议数据解析示例的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

        主站蜘蛛池模板: 99色热| 超碰狠狠| 91在线看片| 中文字幕有码在线视频 | 亚洲天堂少妇 | 午夜精品导航 | 国产原创91 | 一区二区三区国产在线观看 | 久久妇女 | 日本高清网色 | 手机在线亚洲 | 亚洲第一香蕉网 | 丝袜综合网 | 五月婷婷久 | 中文字幕在线色 | 青青草视频免费看 | 熟女熟妇伦久久影院毛片一区二区 | 欧美午夜精品一区二区蜜桃 | 日韩激情网 | 人妻丰满熟妇aⅴ无码 | 欧美日韩三级在线观看 | 人禽l交视频在线播放 视频 | 加勒比在线免费视频 | 97超级碰碰人妻中文字幕 | 久久久久99精品成人片直播 | 日本一区免费 | 伊人久久影视 | 黄色一级视频免费 | 欧美精品久久久久久久免费 | 日韩第一区 | av一区二区三区免费观看 | av先锋资源 | 日本亚洲国产 | 人妻在卧室被老板疯狂进入 | 久久精品激情 | 欧美淫| 久久精品噜噜噜成人88aⅴ | 国产在线观看 | 国产精品igao | 午夜av免费观看 | 国产色黄 | 国产一级一片免费播放 | 国产精品色婷婷99久久精品 | 久一在线 | 久久激情免费视频 | 艳妇臀荡乳欲伦交换gif | 亚洲天堂网在线观看 | 国产精品人人 | 特级淫片裸体免费看冫 | 91精品亚洲 | 成人看片泡妞 | 女人看黄色网 | 午夜在线精品偷拍 | 天堂素人约啪 | 日韩毛片网 | 色男天堂 | 国产一区二区黑人欧美xxxx | 国产精美视频 | 日韩国产在线观看 | 中国浓毛少妇毛茸茸 | 日韩欧美国产一区二区在线观看 | 免费国产在线观看 | 日韩欧美综合视频 | 男人的天堂毛片 | 香蕉91视频 | 国产免费av一区二区三区 | 蜜桃成人无码区免费视频网站 | 国产精品丝袜黑色高跟 | 九九精品视频在线观看 | 成人福利av | 国产三区在线观看 | 国产高清一区在线观看 | 免费看a视频 | 国产成人精品一区在线播放 | av波多野吉衣 | 狠狠躁狠狠躁视频专区 | 老牛嫩草二区三区观影体验 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 手机在线视频一区 | jizz欧美性11| 天天干天天做天天操 | 男男啪啪网站 | 亚洲一区二区不卡视频 | 欧美另类videossexo高潮 | 少妇伦子伦精品无吗 | 久久午夜视频 | 日韩在线中文字幕 | 狂野欧美性猛交xxⅹ李丽珍 | 按摩害羞主妇中文字幕 | 国产伦精品一区二区三区千人斩 | 日韩精品一区二区三区久久 | 人人爽av | 神马久久久久久久久久 | 国产伦精品一区二区三区视频免费 | 好吊色在线观看 | 国产天堂一区 | 91香蕉一区二区三区在线观看 | 国产成人精品无码免费看81 | 激情午夜av|