2014-06-30 23 views
6

Numaraları olan büyük bir dizim var, bir dosyaya yazmak istiyorum.Numaraları lua biçimindeki bir dosyaya ikili dosya biçiminde yaz

Ama bunu yaparsam: Sadece dosyaya bir dize olarak numarasını yazıyorum

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

. Dosyaya numara için doğru baytları nasıl yazarım. Ve bundan sonra nasıl okuyabilirim?

+0

'10000011111101110001010' veya' 34333234323334'ü yazmak ister misiniz? – hjpotter92

+0

10000011111101110001010 yazmak istiyorum, ancak dize formatında değil, 4 baytlık bir tamsayı boyutunu yazmak istiyorum. – Merni

+0

Lua'nın bunun için destek olduğunu düşünmüyorum. En iyi bahsiniz, sayıları uygun dizelere çevirmek için bazı "C" fonksiyonlarını eklemek olacaktır. – Mankarse

cevap

3

bu

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) 

ve 32-bit tamsayı ve çıkış en önemli bayt için bu işi ilk de bu

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)) 

deneyin. Gerektiği gibi uyarlayın.

+1

Ayrıca bunun için bir okuma işlevi yazabilir misiniz? :) – Merni

+0

Bir seferde dört bayt okur musunuz her şeyi oku ve sonra 4 byte bölünmüş? – Merni

+0

Bir seferde dört bayt okurdum. – lhf

6

İkili dönüştürme üzerinde daha ayrıntılı denetim için lua struct kullanabilirsiniz.

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