iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
SideProject30

用 Web Serial/Bluetooth 來控制 ChameleonUltra 硬體系列 第 15

Day 15 Buffer 的進階使用技巧 (Part 1)

  • 分享至 

  • xImage
  •  

Day 15 Buffer 的進階使用技巧 (Part 1)

在使用 Serial 跟硬體溝通的過程中,我們會大量需要操作 Buffer,所以如果對這方面有興趣的話,勢必需要很熟悉 Buffer 的一些常見用法。

建立 Buffer

由於筆者寫的 Buffer 是繼承自 Uint8Array,所以可以使用 new Buffer() 來建立:

new Buffer()
new Buffer(length)
new Buffer(typedArray)
new Buffer(object)
new Buffer(arrayBuffer[, byteOffset[, length]])

如果想要建立 Buffer 可以使用 Buffer.alloc()Buffer.allocUnsafe() 來建立,如果想把其他的資料轉成 Buffer 可以使用 Buffer.from() 來建立:

Buffer.from(array)
Buffer.from(arrayBuffer[, byteOffset[, length]])
Buffer.from(buffer)
Buffer.from(object)
Buffer.from(string[, encoding])

字串與 Buffer 的轉換

如果想要把字串轉換成 Buffer 或是 Buffer 轉換成字串,可以使用 Buffer.from()Buffer.toString() 來轉換:

const buf = Buffer.from('buffer', 'utf8')
console.log(buf.toString('hex')) // 627566666572

常用的字串編碼有 utf8hexasciibase64base64url

直接讀取 Buffer 的內容

由於 Buffer 是繼承自 Uint8Array,所以可以直接使用 [] 運算子來取得其中的元素,也會有 length 可以使用:

const buf = Buffer.from('ABC', 'utf8')
for (let i = 0; i < buf.length; i++) console.log(`buf[${i}] = ${buf[i]}`)
// buf[0] = 65
// buf[1] = 66
// buf[2] = 67

取得 Buffer 中的一小段 Buffer

如果想要取得 Buffer 中的一小段 Buffer,可以使用 slice()subarray() 函式,slice 會複製一份內部資料,但 subarray() 會共用資料:

const buf = Buffer.from('buffer', 'utf8')
console.log(buf.slice(1, 3).toString('utf8')) // uf
console.log(buf.subarray(1, 3).toString('utf8')) // uf

把多個 Buffer 合併

如果想要把多個 Buffer 合併,可以使用 concat() 函式:

const buf1 = Buffer.concat([
  Buffer.from('ABC'),
  Buffer.from('123'),
  Buffer.from('abc'),
])
console.log(buf1.toString('ascii'))
// ABC123abc

上一篇
Day 14 如何以 JS 組成 ChameleonUltra 的 Protocol
下一篇
Day 16 Buffer 的進階使用技巧 (Part 2)
系列文
用 Web Serial/Bluetooth 來控制 ChameleonUltra 硬體30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言