简介
本文所提方法,仅适用32位整数的大小端转换,实际上就上把数字的字节序简单粗暴的颠倒了一下。
使用方法
local a = 0x12345678
local b = ENDIAN_TRANS(a)
输出的变量 b 应该是 0x78563412
通过alien库实现大小端转换,适用于所有lua版本
alien = require "alien"
ENDIAN_TRANS = function(x)
s = alien.pack('>I', x)
t = alien.unpack('I', s)
return t
end
这里有编译好的alien库,linux平台,5.1和5.4可用。
通过string pack unpack实现大小端转换, 适用于5.3/5.4
ENDIAN_TRANS = function(x)
s = string.pack('>I4', x)
t = string.unpack('I4', s)
return t
end
通过math模块实现,适用于所有lua版本
ENDIAN_TRANS = function(x)
y = 0
for i=1,4 do
a, b = math.modf(x/256)
y = y + b * math.pow(256, 5-i)
x = a
end
return y
end