Module:Sandbox/Erutuon/UTF-8
< Module:Sandbox | Erutuon
Jump to navigation
Jump to search
Revision as of 06:52, 17 September 2017 by blackwiki>Erutuon (grab binary digit)
An experiment with printing binary digit representations of characters.
Usage
01100001 01111110 11000010 10100001 11000011 10100001 11001110 10110001 11100001 10111110 10110000 11110000 10100000 10000000 10000000
digits 3 and 4 in 11100001: 1, 0
local p = {}
local bit = require("bit32")
local band = bit.band
local rshift = bit.rshift
local function binary(stringBinary)
return tonumber(stringBinary, 2)
end
-- Assumes in a single byte, with highest digit first.
local function digitAt(number, index)
return band(rshift(number, 8 - index), 1)
end
local function getBits(byte)
local t = {}
for bit = 8, 1, -1 do
t[bit] = band(byte, 1)
byte = rshift(byte, 1)
end
return t
end
-- mw.log(table.concat(getBits(rshift(binary("11100001"), 8 - 3))))
local function iterBytes(str, func)
local out = {}
for i = 1, #str do
table.insert(out, func(string.byte(str, i)))
end
return out
end
function p.show(frame)
local str = frame.args[1] or "ᾰ̓τῑμᾰ́ζω"
return table.concat(
iterBytes(
str,
function(byte)
return table.concat(getBits(byte))
end
),
" "
) .. "\n\n" .. "digits 3 and 4 in 11100001: " .. digitAt(binary("11100001"), 3) .. ", " .. digitAt(binary("11100001"), 4)
end
return p