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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

864閲覧

VLQ 可変長データ 4byte 以内 16進変換方法

xmg

総合スコア20

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/09/30 04:25

編集2020/09/30 04:51

問題点
可変長データと16進数データーの相互変換を javascript で行なう方法がうまく作動しない

質問理由
javascript のビットデーター処理が難しくてとても悩んでいます。
可変長データーと16進数の相互変換を行なうプログラムを
どのように完成されればよいかをおたずねしたいと思います。

javasript

1 2function convert(val) 3{ 4 var buffer = []; 5 6 buffer.push((val & 0x7F)); 7 val = (val >> 7) 8 9 while (val > 0) 10 { 11 buffer.push(0x80 + (val & 0x7f)) 12 val = (val >> 7) 13 } 14 array2hex(buffer.reverse()); 15} 16 17function array2hex(ar) 18{ 19 for (var i=0; i<ar.length; i++) 20 { 21 ar[i] = (ar[i].toString(16) == 0) ? "00" : ar[i].toString(16); 22 } 23 return "0x" + ar.join(''); 24} 25

上記のコードはネット上で見つけた見本ですが、実働するとおかしな値が返ってきました。
このコードは、可変長コードを作成するエンコードプログラムですが
作動しないため、ほかの見本を探すのにかなりの時間をかけて
ようやく端的にまとまった見本を見つけました。

うまく作動する見本を検索したところ、とても単純なコードを見つけました。
ここで見つけた見本は、聞いたこともない
新しい言語ですが、それを用いると、
いとも簡単に VLQの読み書きができることを見つけました。

(1)変換コード見本
VLQ encode/decode

悩みの理由

この見本に登場する
変数名.chr という関数は おそらく
javascript の charCodeAt() と同等の内容に見えますが

(2)上記の関数の紹介
*.chr

この関数は
上述の VLQ変換プログラムの中では

sidef

1 var t = (0x7F & num) 2 var str = t.chr 3

というように、コード変換の対象が1文字単位ではなく、
配列全体が変数として一括変換されるような記述になっています。

どのように、上述(1)のVLQ変換コードを編集すれば
javascript で同じ作業を行なうことができるのでしょうか。

ご指導のほど、よろしくお願いいたします。

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

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

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

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

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

y_waiwai

2020/09/30 04:31

まずはなにをどうしたいのかの説明と、 JavaScriptのうまく行かないコードを提示しましょう
guest

回答2

0

変数名.chr という関数は おそらく

javascript の charCodeAt() と同等の内容に見えますが

逆ですね。charCodeAt()は文字から文字コード、その.chrは解説を読む限り文字コードから文字の変換です。
JavaScriptで言えばString.fromCharCode()です。
しかしこれは次で逆順に並び替えるために文字列(おそらくバイト列と同等)にしているだけであってアルゴリズムの本質ではありません。
JavaScriptに書き換えるなら文字列はバイト列ではありませんし、文字列の反転は単純には出来ないようです。配列にしてreverseを使うのがよいかと思います。

投稿2020/09/30 13:26

ikadzuchi

総合スコア3047

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

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

0

[基礎編]JavaScriptでバイナリデータを扱ってみる

ビットシフト演算よりこちらの方が判りやすい?かも

投稿2020/09/30 06:15

kuma_kuma_

総合スコア2506

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問