2017-12-29 37 views
2

、こんにちは、お友達!私は作業しているライブラリにLua 5.1の互換性を追加しようとしていましたが、これはもともとLua 5.3に書かれています。今まではすべてがかなりうまくいっていました。Luaのバイナリファイルのすべてのバイトを読み取ることができません5.1

私は行動を見つけました。私は原因について全くの手がかりがありません。明らかに、私はLua 5.1上で正しくバイナリファイルを読むことができません。わかりやすくするために、このテストスニペットを実行すると、実行されたバージョンに応じて異なる出力が生成されます。 Luaの5.1を使用して

local f = io.open("test.bin", "wb") 
local t = {} 
for i=1, 256 do t[i] = i-1 end 
local unpack = unpack or table.unpack 
local str = string.char(unpack(t)) 
f:write(str) 
f:close() 

f = io.open("test.bin", "rb") 
local buffer = {} 
for line in f:lines() do 
    print(#line) 
    for i=1, #line do 
     buffer[#buffer+1] = string.byte(line:sub(i,i)) 
    end 
end 
print('Total:', #buffer) 
f:close() 

:Luaの5.3を使用して

245 
Total: 245 

10 
245 
Total: 255 

だから、私はそれを参照してください方法は、バージョン5.1は、単にファイルの最初の "行" をジャンプつまり何らかの理由で。
ご協力いただければ幸いです。

答えて

1

これはLua 5.1とLua 5.2のバグで、Lua 5.3で修正されました。

とにかく、f:lines()をバイナリファイルに使用しないでください。代わりに、ファイル全体をf:read("*a")で読んだり、ブロック単位で読み込んでください。

+0

です。それは働いた、ありがとう:) –

関連する問題