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

3

我试图将字符串数据转换并以字节形式写入文件。

我已经尝试过一些方法,但在hexdump中没有看到00,而是在文件中看到了0x30,这是字符0的十六进制值。

以下是我的代码:

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

当我对文件进行十六进制转储时,得到了这个:
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

为了保持一致性,请使用 file:close() - lhf
2个回答

3
您想以一种方式使用 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中的字符串可以包含任何字节,包括空字节。参见《值和类型》(Values and Types)。

1

提示:使用string.char将数字转换为字节:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接