0

Lua でメモリを読み取る機能はありますが、問題が発生しました。浮動小数点値を読み取りたい。

私は、フロートであると推定するものを、このように見えるメモリに持っています。

Byte Array 65 B6 40 43 EC 35 87 41 51 04 9E 3F
Float Value 192.712478637695

メモリ エディタを使用しているため、float 値はわかっています。Lua には memcpy に似た関数があります。これは readmem(Address,bytes) と呼ばれ、整数値を返します。

readmem を使用して Lua の float にバイト配列を読み込む方法を教えてください。

この質問のために、65 分の 6 はアドレス 00000000 であると仮定してよいと思います。

4

4 に答える 4

5

奇妙なことに、これはミドルエンディアン順に格納されているようです。(これをhttp://www.h-schmidt.net/FloatApplet/IEEE754.htmlで確認しました)

とにかく、http: //yueliang.luaforge.net/のコードを使用して、純粋な Lua で変換を行うことができます。

http://lua-users.org/lists/lua-l/2010-03/msg00910.htmlも参照してください。

C を使用できる場合は、http://lua-users.org/wiki/StructurePackingにリストされているライブラリのいずれかを試してください。

于 2010-07-05T10:57:40.813 に答える
3

これは、すべてを正しく行うのにかなりの量の作業です。指数と仮数 (仮数は仮数と呼ばれることもあります) を抽出し、 を使用して float に変換しmath.frexp、符号ビットが設定されている場合は結果を否定する必要があります。非正規化数と NaN も認識する必要があります。(正規化された数では仮数の最上位ビットは暗黙的であり、非正規化された数では明示的です。) これを自分で行う必要がある場合は、コンピューター科学者が必要とするすべてのことに関する Dave Goldberg の記事を読むと役に立ちます。浮動小数点について知っています。また、Lua の数値は IEEE の double であることに注意し、精度に注意してください。

私がこれを自分で行っていた場合、このすべての苦痛を経験する方法はありません。代わりに、バイトを読み取って を呼び出す C コードを記述しますlua_pushnumber

于 2010-07-05T18:26:20.193 に答える
0

変換を実行するには、C関数を作成する必要があります。Luaにはキャストなどはありません。

于 2010-07-05T09:49:29.843 に答える