浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【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進数文字列に変換する方法でした。
もし使う機会がありましたら参考になれば幸いです。

  • この記事いいね! (0)