Lua write выводит странный байт в файл

При отладке проблемы при написании BMP с использованием двоичных данных с помощью Lua я столкнулся со странным Проблема в том, что вводились некоторые байты.

Когда мы пишем 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?


person Real    schedule 07.04.2021    source источник
comment
это не ошибка. это нормально. Lua и многие другие языки программирования переводят символ новой строки \n 0x0A в родное системное представление новой строки. Под Windows это \r\n! прочитайте это en.wikipedia.org/wiki/Newline   -  person Piglet    schedule 07.04.2021
comment
@Piglet Да, но я сожалею, что закрыл вопрос, потому что я не мог легко найти это ..   -  person Real    schedule 08.04.2021
comment
закрытые вопросы все еще можно найти. также я считаю, что ваш вопрос задан таким образом, который очень специфичен для вашей проблемы, и вряд ли его найдет тот, кто задается вопросом, откуда берутся эти возвраты каретки. как только вы переформулируете свой вопрос, это в основном дубликат существующих вопросов. вы должны были обратиться к справочному руководству Lua. io.open упоминает бинарный режим. поскольку вы используете io.open, вы должны попытаться понять, что это значит, прежде чем использовать io.open. быстрое веб-исследование показывает, что возврат каретки будет добавлен в Windows, если вы не используете этот режим.   -  person Piglet    schedule 08.04.2021


Ответы (1)


Используйте двоичный переключатель "wb" при записи двоичных данных с помощью Lua:

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))
person Real    schedule 07.04.2021