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



取 y = 1510751840。 假设您想要数字 y*1000 的 6 字节小端字节序列。 您正在使用 Lua 5.1。 你怎么能得到它? 没有整数数据类型,只有双精度,这是Lua的默认值。 怎么能做到这一点呢?

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

谢谢!

我为什么要问? 我必须使用 Lua 嵌入式系统为自 UNIX 纪元以来的毫秒数生成一个小端序序列。 我只有秒数,所以我可以生成这个数字的小端序 4 字节序列。 但我必须生成一个 6 字节、48 位字节序列。 所以我的想法是将 32 位时间戳乘以 1000,但我似乎无法在我的 Lua 5.1 嵌入式系统中将该数字相乘。 所以我希望有一个黑客,允许我获得对应于时间戳 * 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

相关内容

最新更新