(recommended: use with PICO-8 0.2.1b or later)
This function can be used to convert binary strings into a format that can be pasted into source code. Binary strings contain all characters from chr(0)..chr(255) and as such include unprintable / unstorable characters. escape_binary_str() adds the needed escape codes and stores the remaining characters as-is. For example character 10 becomes \n and character 0 becomes \0, or \000 when followed by a number (to avoid ambiguity).
This is useful for storing dense binary data efficently (e.g. compressed with PX9). If you are storing structured data in code (like a raw image), it will likely be easier and almost as efficient to store them as a bunch of hexadecimal characters.
function escape_binary_str(s) local out="" for i=1,#s do local c = sub(s,i,i) local nc = ord(s,i+1) local pr = (nc and nc>=48 and nc<=57) and "00" or "" local v=c if(c=="\"") v="\\\"" if(c=="\\") v="\\\\" if(ord(c)==0) v="\\"..pr.."0" if(ord(c)==10) v="\\n" if(ord(c)==13) v="\\r" out..= v end return out end |
Workflow
Step 1. Generate a Binary String
binstr="" for i=1,256 do binstr..=chr(i%256) -- any data you like end ?#binstr -- 256 ?ord(binstr,256) -- 0 ?ord(binstr, 13) -- 13 |
Step 2. Escape the String and Copy to Clipboard
printh(escape_binary_str(binstr), "@clip") |
Step 3. Paste into Source Code
* Turn on Puny Mode (CTRL-P) // to make sure uppercase characters are encoded as punyfont
CTRL-V into source code as a string value bindat="[paste here]". You should get something like this:
bindat="¹²³⁴⁵⁶⁷⁸ \nᵇᶜ\rᵉᶠ▮■□⁙⁘‖◀▶「」¥•、。゛゜ !\"#$%&'()*+,-./0123456789:;<=>[email protected]𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~○█▒🐱⬇️░✽●♥☉웃⌂⬅️😐♪🅾️◆…➡️★⧗⬆️ˇ∧❎▤▥あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんっゃゅょアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッャュョ◜◝\0" |
4. Enjoy your Binary Data
The contents of bindat can now be accessed with ord(bindat, index) (note that index is 1-based).
[Please log in to post a comment]