2010-11-23 8 views
2

일련의 32 비트 부호있는 정수 값 (리틀 엔디안)으로 구성된 파일이 있습니다. 이것을 배열 (또는 유사한) 데이터 구조로 어떻게 읽을 수 있습니까? 배열로 이진 파일 읽기

나는 노력이 :

block = 4 
while true do 
    local int = image:read(block) 
    if not int then break end 
    memory[i] = int 
    i = i + 1 
end 

그러나 메모리 테이블 파일의 일치 값이 포함되어 있지 않습니다. 모든 제안을 부탁드립니다.

답변

8

이 작은 샘플은 파일에서 32 비트 부호있는 정수를 읽고 값을 인쇄합니다.

 
    -- convert bytes (little endian) to a 32-bit two's complement integer 
    function bytes_to_int(b1, b2, b3, b4) 
     if not b4 then error("need four bytes to convert to int",2) end 
     local n = b1 + b2*256 + b3*65536 + b4*16777216 
     n = (n > 2147483647) and (n - 4294967296) or n 
     return n 
    end 

    local f=io.open("test.bin") -- contains 01:02:03:04 
    if f then 
     local x = bytes_to_int(f:read(4):byte(1,4)) 
     print(x) --> 67305985 
    end 
+0

감사합니다. 이것은 완벽하게 작동합니다. – crc

0

이미지 : read()가 제공하는 문자열을 원하는 번호로 변환해야합니다.

3

lpack을 사용하여 데이터를 비 직렬화하는 것이 좋습니다.