問題点
可変長データと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 で同じ作業を行なうことができるのでしょうか。
ご指導のほど、よろしくお願いいたします。