Lua写入输出奇怪的字节到文件[重复]

Posted

技术标签:

【中文标题】Lua写入输出奇怪的字节到文件[重复]【英文标题】:Lua write outputs strange byte to file [duplicate] 【发布时间】:2021-07-02 20:11:36 【问题描述】:

在 Lua 中使用二进制数据调试问题 on writing BMP 时,我遇到了一个奇怪的问题,即引入了一些字节。

当我们写 string.char(10) 时,会出现字节 0x0D0A。

local file = io.open("forbchars.bin","w")

local out = 
for i=1,255 do
    out[#out+1] = string.char(i)
    out[#out+1] = string.char(255)
end

file:write(table.concat(out))

如果您使用十六进制编辑器检查此文件,您会看到 0x0D0A 字节而不是 0x0A (10)。

如何预防?这是 Lua 的错误吗?

【问题讨论】:

这不是错误。这个是正常的。 Lua 和许多其他编程语言将换行符\n0x0A 转换为系统本机换行表示。在 Windows 下是 \r\n!阅读此en.wikipedia.org/wiki/Newline @Piglet 是的,但我很遗憾结束这个问题,因为我无法轻易找到这个...... 仍然可以找到已关闭的问题。我还发现您的问题是以一种对您的问题非常特殊的方式提出的,并且任何想知道这些回车来自哪里的人都不太可能找到。一旦你改写你的问题,它基本上就是现有问题的重复。你应该参考 Lua 参考手册。 io.open 提到了二进制模式。当您使用 io.open 时,您应该在使用 io.open 之前尝试理解这意味着什么。一项快速的网络研究表明,如果您不使用该模式,则会在 Windows 下添加回车。 【参考方案1】:

使用 Lua 写入二进制数据时使用二进制开关"wb"

local file = io.open("forbchars.bin","wb")
local out = 
for i=1,255 do
    out[#out+1] = string.char(i)
    out[#out+1] = string.char(255)
end
file:write(table.concat(out))

【讨论】:

以上是关于Lua写入输出奇怪的字节到文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

处理产生奇怪结果的字节数组的字符串构造函数[重复]

使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一

重命名和重新创建文件时出现奇怪的时间戳重复

无法读取Lua 5.1上的二进制文件的每个字节

奇怪的解密输出

从特定字节的文件中读取的额外奇怪字符