Lua 中的字符串转换为字节并写入文件

我正在尝试将字符串数据转换并写入文件作为字节。

我已经尝试过某些方法,但是在 hexdump 中看到的是0x30,而不是00,这是字符0的十六进制值。

以下是我写的内容:

local data = "000000010000000100000004000000080000000100000000"
for i=1,#data,2 do
  file:write(tonumber(data:sub(i,i+1)))
end
io.close(file)

当我 hexdump 文件时,我得到的是这个:

0000000 30 30 30 31 30 30 30 31 30 30 30 34 30 30 30 38
0000010 30 30 30 31 30 30 30 30
0000018

期望的结果是:

0000000 00 00 00 01 00 00 00 01 00 00 00 04 00 00 00 08
0000010 00 00 00 01 00 00 00 00
0000018
点赞
用户107090
用户107090

如果字符串包含十六进制,使用tonumber(...,16)

file:write(string.char(tonumber(data:sub(i,i+1))))

将数字转换为字节,请使用[string.char](http://www.lua.org/manual/5.3/manual.html#pdf-string.char):

2019-08-27 13:25:46
用户4567755
用户4567755

你想要使用string.char的方式有两种:

第一种:

local data = "000000010000000100000004000000080000000100000000"
for i=1,#data,2 do
  file:write(string.char(tonumber(data:sub(i,i+1), 16)))
end
io.close(file)

第二种:

local data = string.char(0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0,1,0,0,0,0)
file:write(data)
io.close(file)

需要注意的是,在 Lua 中,字符串可以包含任意字节,包括 null 字节。具体请参见Values and Types

2019-08-27 13:31:28