2011年5月19日木曜日

JavaScriptでFloatを読み込んでみた

JavaScriptでバイナリデータ(float)をGETで読み込んでみた。
Float.binにはFloatの適当な数字を書きこんである。



ソースは以下のとおり、見て分かるけどjQueryを使用。
var readFloat = function(data) {
    var rv = 0;
    var i = 0;
    for (i = 3; i >= 0; --i) {
        rv |= (data.charCodeAt(i) & 0xff) << (i * 8);
    }

    var sign = rv & 0x80000000;
    var exp  = (rv >> 23) & 0xff;
    var frac = rv & 0x7fffff;
    if (!rv || rv === 0x80000000) { // 0.0 or -0.0
        return 0;
    }
    if (exp === 0xff) { // NaN or Infinity
        return frac ? NaN : Infinity;
    }
    return (sign ? -1 : 1) * (frac | 0x800000) * Math.pow(2, exp - 127 - 23);
}

$.ajax("float.bin",
{
    beforeSend: function(xhr){
        xhr.overrideMimeType("text/plain; charset=x-user-defined");
    },
    success:function(data)
    {
        console.log(readFloat(data));
    }
});
つまずいたのはoverrideMimeTypeのところ。コレはコンテンツタイプを強制するものらしいです(参考)。

また、これを書くにあたり以下のソースをコピーさせて参考にさせていただきました。
http://code.google.com/p/uupaa-js/source/browse/trunk/0.8/src/misc/msgpack.js
http://www.heypage.com/nagoon97/BinFileReader/BinFileReader.js

0 件のコメント:

コメントを投稿