【问题标题】:Lua write outputs strange byte to file [duplicate]Lua写入输出奇怪的字节到文件[重复]
【发布时间】: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 下添加回车。

标签: windows lua bin


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2015-12-29
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多