On Fri, May 28, 2010 at 04:41, Vyacheslav Egorov wrote:
Double 0xFF000000 is too big to be represented by a signed integer.
You should get value from Lua stack as double then cast it to unsigned
integer.
On Fri, May 28, 2010 at 12:14 PM, Dmitry Gapkalov wrote:
On MSVC compiler this construction
#define lua_number2int(i,n) __asm {__asm fld n __asm fistp i}
Example:
bit.band(0xFF000000, 0x00FFFFFF)
while debug after getting from stack, the first value is 0x80000000,
second 0xFFFFFF
On a related note, I'm curious how floating point rounding errors are
going to affect binary operations. I know of at least one emulator
(Dolphin, IIRC) that exposes a raw memory access API to Lua, but
suffers from rounding error - reading address 0x80000020 instead gives
you the value of 0x80000000, etc. I encountered the same problem when
implementing a similar API, and my solution was the HexType patch from
the wiki, but this won't work for everyone, unless 5.2 actually adds
an integer data type.