2014-06-30 17 views
6

Ho un grande array con numeri che vorrei scrivere su un file.Scrive i numeri su un file in lua in formato binario

Ma se faccio questo:

local out = io.open("file.bin", "wb") 
local i = 4324234 
out:write(i) 

sto solo scrivendo il numero come stringa al file. Come scrivo i byte corretti per il numero da archiviare. E come posso leggerlo in seguito.

+0

Si desidera scrivere '10000011111101110001010' o'34333234323334'? – hjpotter92

+0

Voglio scrivere 10000011111101110001010, ma non in formato stringa, voglio scrivere 4 byte, la dimensione di un intero. – Merni

+0

Non credo che Lua abbia contribuito a questo. La soluzione migliore sarebbe aggiungere alcune funzioni 'C' per trasformare i numeri nelle stringhe appropriate. – Mankarse

risposta

3

Prova questa

function writebytes(f,x) 
    local b4=string.char(x%256) x=(x-x%256)/256 
    local b3=string.char(x%256) x=(x-x%256)/256 
    local b2=string.char(x%256) x=(x-x%256)/256 
    local b1=string.char(x%256) x=(x-x%256)/256 
    f:write(b1,b2,b3,b4) 
end 

writebytes(out,i) 

e anche questo

function bytes(x) 
    local b4=x%256 x=(x-x%256)/256 
    local b3=x%256 x=(x-x%256)/256 
    local b2=x%256 x=(x-x%256)/256 
    local b1=x%256 x=(x-x%256)/256 
    return string.char(b1,b2,b3,b4) 
end 

out:write(bytes(0x10203040)) 

Questi lavori per gli interi e in uscita il byte più significativo a 32 bit prima. Adeguare se necessario.

+1

puoi scrivere anche una funzione di lettura per questo? :) – Merni

+0

vuoi leggere quattro byte alla volta o vuoi leggere tutto e poi dividerlo in 4 byte? – Merni

+0

Avrei letto quattro byte alla volta. – lhf

6

È possibile utilizzare lua struct per un controllo più dettagliato sulla conversione binaria.

local struct = require('struct') 
out:write(struct.pack('i4',0x123432)) 
Problemi correlati