最近需要使用LUA读写一些二进制文件,遇到了一些INT写入的问题,这里笔记下一些实现方式:
参考链接:
【 https://www.runoob.com/lua/lua-file-io.html 】
【 http://www.lua.org/manual/5.4/manual.html 】
CONTENTS
使用函数取余的方式对INT进行转换:
-- B1 B2 B3 B4 local function B4(value) return value % 256 end local function B3(value) return B4(value/256) end local function B2(value) return B3(value/256) end local function B1(value) return B2(value/256) end local function write_int_to_raw_file() raw_file = io.open(raw_file_name, "wb") local raw_packet = { B4(int_val1), B3(int_val1), B2(int_val1), B1(int_val1), B4(int_val2), B3(int_val2), B2(int_val2), B1(int_val2), } raw_file:write( string.char( table.unpack(raw_packet) ) ) raw_file:flush() end
使用位偏移的方式对INT进行转换:
local function write_int_to_raw_file() raw_file = io.open(raw_file_name, "wb") local raw_packet = { int_val1&0xFF, (int_val1>>8)&0xFF, (int_val1>>16)&0xFF, (int_val1>>24)&0xFF, int_val2&0xFF, (int_val2>>8)&0xFF, (int_val2>>16)&0xFF, (int_val2>>24)&0xFF, } raw_file:write( string.char( table.unpack(raw_packet) ) ) raw_file:flush() end
使用string.pack方式直接写入INT:
local function write_int_to_raw_file() raw_file = io.open(raw_file_name, "wb") raw_file:write( string.pack(">J>J>J>J", int_val1, int_val2) raw_file:flush() end
需要注意的是位运算和打包操作都需要Lua5.3及以上版本支持,这里还是比较麻烦的:
发表评论