最近需要使用LUA读写一些二进制文件,遇到了一些INT写入的问题,这里笔记下一些实现方式:
参考链接:
【 https://www.runoob.com/lua/lua-file-io.html 】
【 http://www.lua.org/manual/5.4/manual.html 】
使用函数取余的方式对INT进行转换:
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" ) |
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) ) ) |
使用位偏移的方式对INT进行转换:
local function write_int_to_raw_file() |
raw_file = io.open(raw_file_name, "wb" ) |
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) ) ) |
使用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) |
需要注意的是位运算和打包操作都需要Lua5.3及以上版本支持,这里还是比较麻烦的:

发表评论