亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

BLE 中央陣列緩沖區

BLE 中央陣列緩沖區

蠱毒傳說 2022-09-02 21:33:19
使用Cordova BLE central和Ionic,我正在嘗試編寫(沒有Response)。根據文檔,數據格式是ArrayBuffer。從數據包分析中我知道寫入的值應該是02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D我的問題是如何使用JavaScript創建所需的ArrayBuffer?我試過Buffer.from("02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D").buffer但是當我檢查交換的數據包時,寫入的值為3032 4644 2031 3630 3020 3030 3030 2030 3030 3020 3030 3245 2031 3438 3120 3146 3846 2037 3530 3020 3030 3030 2030 3034 44
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

https://nodejs.org/api/buffer.html#buffer_buf_buffer


此 ArrayBuffer 不保證與原始緩沖區完全對應。有關詳細信息,請參閱 buf.byteOffset 上的注釋。


底層 ArrayBuffer 中的緩沖區數據從.byteOffset


您還為Buffer.from讀取的十六進制字符串使用了錯誤的格式,并且您還需要告訴它使用“十六進制”編碼(默認值為“utf-8”)。它不理解空格(也不理解16位值的概念,這將是TypedArrays和.readInt16BE以及其他實用程序函數的工作)。


buf=Buffer.from("02FD160000000000002E14811F8F75000000004D",'hex')

data=buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.length)

我不知道你從哪里得到這些數據,但它看起來像16位值。您必須確保數據的字節序,以確保字節不需要交換。


通過使用 TypedArray 獲取 ArrayBuffer。這適用于瀏覽器:


    data = new Uint16Array("02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D"

     .split(' ').map(x=>parseInt(x,16)))

    

    console.log([...data].map(x=>x.toString(16).padStart(4,'0')).join(''))

    

    buf = data.buffer; //ArrayBuffer


查看完整回答
反對 回復 2022-09-02
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號