Lua 32位时间戳乘以1000的6字节小尾端序列

Lua 32位时间戳乘以1000的6字节小尾端序列,lua,32bit-64bit,32-bit,Lua,32bit 64bit,32 Bit,取y=1510751840。假设您需要数字为y*1000的6字节小尾端字节序列。您正在使用Lua5.1。你怎么能得到它?没有整数数据类型,只有double,这是Lua的默认值。如何做到这一点 例如,如果y=1510743753,则6字节序列应为:01 5f bf 58 41 28 谢谢大家! 我为什么要问?我必须为使用Lua嵌入式系统的UNIX时代以来的毫秒数生成一个小小的endian序列。我只有秒数,所以我可以生成这个数的一个4字节的小尾端序列。但我必须生成一个6字节、48位字节的序列。所以我

取y=1510751840。假设您需要数字为y*1000的6字节小尾端字节序列。您正在使用Lua5.1。你怎么能得到它?没有整数数据类型,只有double,这是Lua的默认值。如何做到这一点

例如,如果y=1510743753,则6字节序列应为:01 5f bf 58 41 28

谢谢大家!

我为什么要问?我必须为使用Lua嵌入式系统的UNIX时代以来的毫秒数生成一个小小的endian序列。我只有秒数,所以我可以生成这个数的一个4字节的小尾端序列。但我必须生成一个6字节、48位字节的序列。所以我的想法是将32位时间戳乘以1000,但在我的Lua5.1嵌入式系统中,我似乎无法将这个数字乘以1000。因此,我希望有一种黑客可以让我获得与时间戳*1000对应的6字节序列。

另一种方法:

local y = 1510743753

local lo16 = y % 2^16 * 1000 % 2^16
local hi32 = (y - y % 2^16) / 2^16 * 1000 + (y % 2^16 * 1000 - lo16) / 2^16

print(("%08x %04x"):format(hi32, lo16))   -->  015fbf58 4128
function byte_n(val,byte_num)
  val = val * 1000
  for i = 1, byte_num-1 do
    val = ('%.0f'):format((val - val % 256) / 256)
  end
  return ('%02x'):format(val % 256)
end

y = 1510743753      --> 01 5f bf 58 41 28

print(byte_n(y,6))  --MSB
print(byte_n(y,5))
print(byte_n(y,4))
print(byte_n(y,3))
print(byte_n(y,2))
print(byte_n(y,1))  --LSB
另一种方法:

function byte_n(val,byte_num)
  val = val * 1000
  for i = 1, byte_num-1 do
    val = ('%.0f'):format((val - val % 256) / 256)
  end
  return ('%02x'):format(val % 256)
end

y = 1510743753      --> 01 5f bf 58 41 28

print(byte_n(y,6))  --MSB
print(byte_n(y,5))
print(byte_n(y,4))
print(byte_n(y,3))
print(byte_n(y,2))
print(byte_n(y,1))  --LSB

如果可以安装Luarock模块,则第32位应启用基于整数的位操作:如果可以安装Luarock模块,则第32位应启用基于整数的位操作: