†でおきしブログ†

ウナギ食べたいヽ(•̀ω•́ )ゝ✧

【JavaScript】typedArrays(型付き配列)を利用した型変換について


☆経緯と検討

JavaScriptの数値はIEEE754の倍精度64ビットが使われるそうなのですが、
特に気にする事なく生きてきました。

…が、ArrayBufferを使う場面でビュー(typedArrays(型付き配列))を使う
状況に出くわし、型のキャストをしたくなりました。


例えば以下のようなUint8の配列があるとします

var uint8Array = new Uint8Array([255,60,3,1,2,3,4,5]);

その中の上位2要素分をint16でキャストしたいとします。

  • キャストしたい2要素結合値
    • 上位8bit(255)、下位8bit(60) → 0xFF3C

しかも配列の3要素目以降はそのままUint8でアクセスしたいとします。

であれば、上位2要素分だけint16にしたいわけですが、
イメージとしては以下のようにキャストできれば良いのですけれど、
(int16)( (uint8Array[0] << 8) + uint8Array[1] )
こういった変換がJavaScriptには無いようでした。

※32bit符号有り左ビットシフト(<<0)や32bit符号無し右ビットシフト(>>>0)では、
 期待するint16とはなりません。


そんなわけで冒頭のようにtypedArrays(型付き配列)を利用しました。
もっとスマートに型変換できる方法を知っている方がいたら教えてくださいませ。
f:id:deokisikun:20171227234620p:plain