none
socket封包格式問題 RRS feed

  • 問題

  • 以下有三個問題,看規格書有點不太懂 (各位前輩抱歉,小的最近接到新工作都要規格書,這方面經驗很薄弱,想請您們指導)

    1.
    欄 位 名 稱    |長  度      | 說   明

    AP-Message-Length|    2    |Integer, high byte在左邊代表TMP訊息內容的長度


    我有去看送出的封包是2個bytes  0x000e
    所以長度是 14
    我也算過 整個要送的TMP 是14個bytes
    請問以上的說明" high byte在左邊代表TMP訊息內容的長度 ", 是什麼意思??

    若送出是 0x0e0e 這樣長度是多少啊 ??

    2.
      像遇到這種規格書,設定幾個bytes 代表是什麼欄位,我觀察截取的封包
      ex:長度 0x000e   ==>  要抓14個bytes
         內容 0x3132   ==>  對應又是ASCII的 1 2

      這樣若抓封包的byte array 一下子是直接看它的所代表的值 ,一下子要轉成ASCII
      前輩們遇到這樣的狀況 大多怎麼去撰寫程式啊 ??
      我是用 c#

    3.

       規格書有提到 開頭用0xfefe 結尾用0xefef

       收送都是這個格式

       因為是2個bytes

       我想到問題就是,如何讓程式可以

       送出時 加頭 0xfefe

                 加尾 0xefef

       收到資料時 可以 傳入然後去頭去尾

       有沒有什麼好的寫法??

    以上我試著表達 若有不清楚請再跟我說 麻煩大家了


     
    • 已編輯 布利 2013年6月8日 上午 05:34
    2013年6月8日 上午 05:23

解答

  • 所以我猜整串應該是長這樣

    FE-FE(開頭碼)-00-0E(長度)-這邊有 14 Bytes 的實際訊息-EF-EF(結尾碼)

    通常這種都是廠商自己訂的, 至於那一段要怎麼轉, 就要看廠商怎麼定, 也有中間用 BCD 碼之類的.

    要理解這些東西, 最好的方法就是試著用中文表達它, 如果你可以順利用中文表達清楚, 通常就表示你懂了.

    寫法你可以參考

    Serial Port 系列(15) 基本篇 -- 發送回應(一)

    把 15~19 看完.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 布利 2013年6月10日 上午 09:46
    2013年6月8日 上午 05:38
    版主
  • 假設是 0x00 0x0e

    High Byte 在左邊代表值為 14

    Low Byte 在左邊代表值為 3584

    小算盤很好用, 拿出來用.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 布利 2013年6月10日 上午 09:46
    2013年6月8日 上午 07:33
    版主

所有回覆

  • 所以我猜整串應該是長這樣

    FE-FE(開頭碼)-00-0E(長度)-這邊有 14 Bytes 的實際訊息-EF-EF(結尾碼)

    通常這種都是廠商自己訂的, 至於那一段要怎麼轉, 就要看廠商怎麼定, 也有中間用 BCD 碼之類的.

    要理解這些東西, 最好的方法就是試著用中文表達它, 如果你可以順利用中文表達清楚, 通常就表示你懂了.

    寫法你可以參考

    Serial Port 系列(15) 基本篇 -- 發送回應(一)

    把 15~19 看完.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 布利 2013年6月10日 上午 09:46
    2013年6月8日 上午 05:38
    版主
  • 1.
    欄 位 名 稱    |長  度      | 說   明

    AP-Message-Length|    2    |Integer, high byte在左邊代表TMP訊息內容的長度


    我有去看送出的封包是2個bytes  0x000e
    所以長度是 14
    我也算過 整個要送的TMP 是14個bytes
    請問以上的說明" high byte在左邊代表TMP訊息內容的長度 ", 是什麼意思??

    若送出是 0x0e0e 這樣長度是多少啊 ??

    ============================================================

    請問這一點 有沒有人看得懂啊???

    2013年6月8日 上午 07:05
  • 假設是 0x00 0x0e

    High Byte 在左邊代表值為 14

    Low Byte 在左邊代表值為 3584

    小算盤很好用, 拿出來用.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 布利 2013年6月10日 上午 09:46
    2013年6月8日 上午 07:33
    版主
  • 假設是 0x00 0x0e

    High Byte 在左邊代表值為 14

    Low Byte 在左邊代表值為 3584

    小算盤很好用, 拿出來用.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

       Bill 大大 謝謝您的回應
       High Byte 與 Low Byte 是什麼意思??

       以這個例子 0x000e   ==> 14

       是怎麼算看 High 跟 Low呢??

       可否解惑一下   謝謝~~~


    • 已編輯 布利 2013年6月8日 上午 07:42
    2013年6月8日 上午 07:38
  • 如果你有兩個 Byte , Byte[0]= 0x00 , Byte[1]=0x0e

    High byte 在左邊就是 0x000e  (表示高位元組在左邊)

    Low byte 在左邊就是0x0e00  (表示低位元組在左邊)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2013年6月8日 上午 08:15
    版主
  • 請跟原廠先要範例或工具,將原廠的範例封包錄下來分析後再測試。
    2013年6月8日 下午 03:05
  • 如果你有兩個 Byte , Byte[0]= 0x00 , Byte[1]=0x0e

    High byte 在左邊就是 0x000e  (表示高位元組在左邊)

    Low byte 在左邊就是0x0e00  (表示低位元組在左邊)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


         抱歉 還是有點不太懂

        Byte[0]= 0x00 , Byte[1]=0x0e

        到底哪個是高位元啊???

         為何要分 High byte 跟 Low byte  ??

         在這邊指"high byte在左邊代表TMP訊息內容的長度"  為何不用一個byte 就好了??

        

         還是想搞清楚  抱歉了~~~


    • 已編輯 布利 2013年6月8日 下午 04:25
    2013年6月8日 下午 03:59

  •      抱歉 還是有點不太懂

        Byte[0]= 0x00 , Byte[1]=0x0e

        到底哪個是高位元啊???

         為何要分 High byte 跟 Low byte  ??

         在這邊指"high byte在左邊代表TMP訊息內容的長度"  為何不用一個byte 就好了??

        

         還是想搞清楚  抱歉了~~~


    真相只有一個: 就是這件事是沒什麼道理, 純粹是訂協定的人自己爽, 只要他覺得開心, 要用 4 個 Bytes (因為這剛好是 Int32/UInt32 的長度) 也行.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年6月11日 上午 02:53
    版主
  • 會分 Hi / Lo 的,一般來說,是 UInt16 或 Int16 ,才會分 Hi / Lo

    對於 Linux 來說,要轉換成 Int16 ,要擺成 HiLo

    對於 Windows 來說,要轉換成 Int16 ,要擺成 LoHi

    通訊協定不知道你會用哪種 OS ,所以會明確告訴你 Hi/Lo 是哪個,然後你在你的 Client 端自己對應。

    Hi/Lo 要怎樣擺,是計算機概論中,記憶體中數值的組成,通常會跟 IEEE 754 一起介紹。

    2013年6月11日 下午 03:33