2017-12-29 71 views
2

, 안녕하세요, 친구! 저는 루아 5.1과의 호환성을 제가 작업하고있는 라이브러리에 추가하려고 시도 했었습니다. 원래 루아 5.3에 쓰여졌습니다. 지금까지는 모든 것이 상당히 잘 진행되었습니다.루아에서 이진 파일의 모든 바이트를 읽을 수 없습니다.

나는 행동에 대해 비틀 거리며 나는 그 원인에 대한 단서가 전혀 없다. 여기에 문제가 있습니다 : 분명히 루아 5.1에서 바이너리 파일을 제대로 읽을 수 없습니다. 명확하게하기 위해이 테스트 스 니펫을 실행하면 실행 된 버전에 따라 출력이 달라집니다. 루아 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() 

: 루아 5.3을 사용하여

245 
Total: 245 

:

10 
245 
Total: 255 

그래서, 내가 그것을 볼 수있는 방법은 버전 5.1은 단순히 파일의 첫 번째 "라인"을 점프 즉 몇 가지 이유.
도움이 될 것입니다.

답변

1

이것은 루아 5.1 및 루아 5.2의 버그로 루아 5.3에서 수정되었습니다.

어쨌든 f:lines()은 이진 파일과 함께 사용하지 마십시오. 대신 전체 파일을 f:read("*a")으로 읽거나 블록별로 읽으십시오.

+0

나는 본다. 그것은 일했다, 고마워. :) –