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 和许多其他编程语言将换行符\n
0x0A 转换为系统本机换行表示。在 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写入输出奇怪的字节到文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章