Files&Bits.lua
In order to access the raw bits and bytes of some data, e.g. to read or write binary (file) streams, you can use the Lua bit
library. It's built into the Renoise API. There's no need to require
it.
See bit documentation for more info and examples.
-- reading integer numbers or raw bytes from a file
local function read_word(file)
local bytes = file:read(2)
if (not bytes or #bytes < 2) then
return nil
else
return bit.bor(bytes:byte( 1),
bit.lshift(bytes:byte(2), 8))
end
end
local function read_dword(file)
local bytes = file:read(4)
if (not bytes or #bytes < 4) then
return nil
else
return bit.bor(bytes:byte(1),
bit.lshift(bytes:byte(2), 8),
bit.lshift(bytes:byte(3), 16),
bit.lshift(bytes:byte(4), 24))
end
end
-- and so on (adapt as needed to mess with endianess!) ...
local file = io.open("some_binary_file.bin", "rb")
local bytes = file:read(512)
if (not bytes or #bytes < 512) then
print("unexpected end of file")
else
for i = 1, #bytes do
print(bytes:byte(i))
end
end
print(read_word(file) or "unexpected end of file")
print(read_dword(file) or "unexpected end of file")