【发布时间】: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 下添加回车。