Difference between revisions of "Module:Sandbox/Erutuon/UTF-8"

From blackwiki
Jump to navigation Jump to search
blackwiki>Erutuon
(newbie mistake)
blackwiki>Erutuon
(grab binary digit)
Line 4: Line 4:
 
local band = bit.band
 
local band = bit.band
 
local rshift = bit.rshift
 
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 function getBits(byte)
Line 13: Line 22:
 
     return t
 
     return t
 
end
 
end
 +
 +
-- mw.log(table.concat(getBits(rshift(binary("11100001"), 8 - 3))))
  
 
local function iterBytes(str, func)
 
local function iterBytes(str, func)
Line 32: Line 43:
 
         ),
 
         ),
 
         " "
 
         " "
     )
+
     ) .. "\n\n" .. "digits 3 and 4 in 11100001: " .. digitAt(binary("11100001"), 3) .. ", " .. digitAt(binary("11100001"), 4)
 
end
 
end
  
 
return p
 
return p

Revision as of 06:52, 17 September 2017

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