util.string.unpack
Shared
Unpacks values from a binary string according to a format
Syntax
local ..., next_pos = util.string.unpack(
format,
input,
start_at = 1
)Parameters
| Type | Name | Description |
|---|---|---|
string | format | Format string - same format as used in util.string.pack |
string | input | Binary string containing packed data |
int | start_at | Starting position in the string |
Returns
| Type | Name | Description |
|---|---|---|
any | ... | Unpacked values |
int | next_pos | Index of the first unread byte in the string |
Examples
local packed = util.string.pack("iii", 10, 20, 30)
local a, b, c = util.string.unpack("iii", packed)
core.engine.print("info", a, b, c) -- 10 20 30local packed = util.string.pack("ii", 100, 200)
local val1, pos = util.string.unpack("i", packed)
local val2 = util.string.unpack("i", packed, pos)
core.engine.print("info", val1, val2) -- 100 200local packed = util.string.pack("c5", "hello")
local str = util.string.unpack("c5", packed)
core.engine.print("info", str) -- 'hello'local packed = util.string.pack("z", "world")
local str, nextPos = util.string.unpack("z", packed)
core.engine.print("info", str) -- 'world'
core.engine.print("info", nextPos) -- 7local packed = util.string.pack("ifd", 42, 3.14, 2.718)
local i, f, d = util.string.unpack("ifd", packed)
core.engine.print("info", i, f, d) -- 42 3.14 2.718local packed = util.string.pack("iii", 1, 2, 3)
local value = util.string.unpack("i", packed, 5)
core.engine.print("info", value) -- 2local packed = util.string.pack("<I4", 0x12345678)
local value = util.string.unpack("<I4", packed)
core.engine.print("info", util.string.format("0x%X", value)) -- '0x12345678'local packed = util.string.pack(">I4", 0xABCDEF00)
local value = util.string.unpack(">I4", packed)
core.engine.print("info", util.string.format("0x%X", value)) -- '0xABCDEF00'local packed = util.string.pack("BBB", 65, 66, 67)
local b1, b2, b3 = util.string.unpack("BBB", packed)
core.engine.print("info", util.string.char(b1, b2, b3)) -- 'ABC'local packed = util.string.pack("d", util.math.pi)
local value = util.string.unpack("d", packed)
core.engine.print("info", value) -- 3.14159...local packed = util.string.pack("c10i4f", "PlayerName", 100, 99.5)
local name, health, score = util.string.unpack("c10i4f", packed)
core.engine.print("info", name, health, score)local packed = util.string.pack("s1", "hello")
local str = util.string.unpack("s1", packed)
core.engine.print("info", str) -- 'hello'local packed = util.string.pack("zz", "first", "second")
local str1, pos = util.string.unpack("z", packed)
local str2 = util.string.unpack("z", packed, pos)
core.engine.print("info", str1, str2) -- 'first' 'second'local packed = util.string.pack("b", 1)
local value = util.string.unpack("b", packed)
local bool = value ~= 0
core.engine.print("info", bool) -- truelocal packed = util.string.pack("i4i4i4i4", 1, 2, 3, 4)
local a, b, pos = util.string.unpack("i4i4", packed)
local c, d = util.string.unpack("i4i4", packed, pos)
core.engine.print("info", a, b) -- 1 2
core.engine.print("info", c, d) -- 3 4