If you write only ASCII characters to a file, you can simply open it in Notepad or any other text editor:
local out = io.open("file.bin", "wb") local str = string.char(72,101,108,108,111,10) -- "Hello\n" out:write(str) out:close()
The resulting file will contain:
Hello
On the other hand, if you write real binary data (e.g. random bytes), you will get garbage:
local out = io.open("file.bin", "wb") local t = {} for i=1,1000 do t[i] = math.random(0,255) end local str = string.char(unpack(t)) out:write(str) out:close()
This is similar to the saved video game files you saw.
If you still donβt get it, try writing all possible octets to a file:
local out = io.open("file.bin", "wb") local t = {} for i=0,255 do t[i+1] = i end local str = string.char(unpack(t)) out:write(str) out:close()
and then open it with a hex editor (here I used Hex Fiend on Mac OS) to see the corresponding matches:

Here, on the left, you have bytes in hexadecimal order, and on the right is a textual representation. I chose the capital letter H, which, as you see on the left, corresponds to 0x48. 0x48 is 4 * 16 + 8 = 72 in base 10 (look at the bottom panel of the screenshot, which tells you about it).
Now look at my first code example and guess what the code is for lowercase e ...
And finally, look at the last 4 lines of the screenshot (bytes 128 through 255). This is the trash that you saw.