简介
本文所提方法,仅适用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
文章介绍了在Lua中进行32位整数大小端转换的三种方法:使用alien库、string.pack/unpack函数以及math模块。提供了适用于不同Lua版本的代码示例,包括alien库在Linux平台上的应用以及针对5.3/5.4版本的string函数实现。
大小端转换&spm=1001.2101.3001.5002&articleId=129197869&d=1&t=3&u=adb416ff1d8f4e0db6a2ce6107ccbbc3)
2561

被折叠的 条评论
为什么被折叠?



