【JavaScript】ArrayBufferを16進数の文字列に変換する

需要があるのかは全く分かりませんが… ArrayBuffer を16進数の文字列に変換する方法についてです。
先日ご紹介した Cordova のプラグイン「cordova-plugin-ble-central」で、接続したデバイスからデータを取得したのですが、返却される値が ArrayBuffer で、そのままでは扱えないため、変換処理が必要でした。
GitHub のページにもその旨が記載してあり、変換用のコードも掲載されていました。

function bytesToString(buffer) {
    return String.fromCharCode.apply(null, new Uint8Array(buffer));
}

が、データ受信に成功した時に得られるデータを他アプリで確認したところ、どうやら16進数の文字列のようでしたので、上記コードではなく自分で実装しました。

 

変換方法ですが、下記の記事を参考にさせてもらいました。

【Node.js】Uint8Array <-> 16進数文字列の相互変換 – Qiita
https://qiita.com/Appseed246/items/7cbab7a13f0b09cfec55

実際に書いたコードは下記のとおりです。

const hex = Buffer.from(new Uint8Array([変換したいArrayBuffer])).toString("hex");

まず、ArrayBuffer を Uint8Array に変換し、それを toString メソッドを使って 16進数に変換しました。

そして、今回使ってみるまで知らなかったのですが、toString メソッドって 10進数だけじゃなく、2進数や 16進数に変換することもできたんですね…!
今まで、ただ単に数値などを文字列に変換することにしか使っていなかったので知りませんでした。
こちらに関しては、下記の記事が参考になりそうです。

2進数・16進数・10進数-JavaScript入門
https://www.pazru.net/js/number/6.html

 

以上、ArrayBuffer を 16進数文字列に変換する方法でした。
もし使う機会がありましたら参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG