質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

4981閲覧

Node.jsでBufferをバイナリ文字列に変更したい

hamar1

総合スコア26

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/04/03 09:41

###前提・実現したいこと
Node.jsで、バッファ:<Buffer 08 88 f0>をバイナリ文字列000010001000100011110000に変換したいです。
初歩的な質問になるかと思いますが、良い解決法が見当たっていないため、お答えいただけるとありがたいです。
よろしくお願いします。

###該当のソースコード

function buf2bin(data){//data = <Buffer 08 88 f0> var num = data.readUInt16BE(0,data.length); var binData = str.toString(2); while(binData.length < 24){ binData = "0" + binData; } console.log("binData : " + binData); return binData; }

###発生している問題・エラーメッセージ
data.lengthでdataのbyte数を指定しているはずですが、最初の2byteしか読めておらず、ずれて下記のようなlogが出ています。
(実際には非常に長いバッファなので、20桁分以上ずれています。paddingナシでは100010001000のみが出力されます。)

binData : 000000000000100010001000

###試したこと
この他の実装方法として、binaryへの変換に下記の方法を試しましたが、上手くいっておりません。

var hexStr = data.toString('hex', 0, data.length); var binData = parseInt(hexStr).toString(2);

###補足情報(言語/FW/ツール等のバージョンなど)
OS: debian7
言語: Node.js, ver 0.10.29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

readUInt16BEで要素を取り出そうとしておられますが、この関数はBufferの中身の2要素を取り出しビッグエンディアンとして解釈した整数値を取り出すものです。しかし処理を単純にするためにはバイト単位で取り出した方が簡単ではないでしょうか。例えば以下のように。

javascript

1function buf2bin(buf) { 2 var str = "" 3 for (var pair of buf.entries()) { 4 var x = pair[1].toString(2) 5 // 上位のビットの0埋め 6 if (x.length < 8) { 7 str += "00000000".substring(x.length) 8 } 9 str += x 10 } 11 return str 12}

なお、javascriptに暗いのでよくない書き方になっているかも知れません。文字列の連結(JavaでいうStringBuilderを使うといったような配慮)やjavascriptの基本文法そのものが少々あやしいです...
(win10: Node.js v6.10.1)

投稿2017/04/03 11:36

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hamar1

2017/04/04 00:58 編集

> KSwordOfHasteさん ありがとうございます。 nodeのversionが古すぎてfor...ofが動かなかったですが、綺麗に目的のbinaryデータを取得することが出来ました。 調べてもなかなか一発でbufferをバイナリで解釈することが出来ると書かれておらず困っていましたが、純粋にtoString(2)で変換できることが分かり、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問