toz85
function toz85( str ) --> z85str, err
Description
Encodes a data string to a Z85 string. The data string must be divisible by 4.
Parameters
- z85str
-
The data string that should be encoded.
Return Values
- str
-
The Z85 encoded string.
- err
-
A message that explains the error, otherwise nil.
Code
--ZFUNC-toz85-v1 local function toz85( str ) --> z85str local z85Encoder = "0123456789".. "abcdefghijklmnopqrstuvwxyz".. "ABCDEFGHIJKLMNOPQRSTUVWXYZ".. ".-:+=^!/*?&<>()[]{}@%$#" local errlen = "invalid length: %d - must be a multiple of 4" if ( #str % 4 ) ~= 0 then return nil, string.format( errlen, #str ) end local result = {} local value = 0 for i = 1, #str do local b = string.byte( str, i ) value = ( value * 256 ) + b if ( i % 4 ) == 0 then local divisor = 85 * 85 * 85 * 85 while divisor ~= 0 do local index = ( math.floor( value / divisor ) % 85 ) + 1 table.insert( result, z85Encoder:sub( index, index ) ) divisor = math.floor( divisor / 85 ) end value = 0 end end return table.concat( result ) end return toz85
Examples
local t = require( "taptest" ) local toz85 = require( "toz85" ) --http://rfc.zeromq.org/spec:32 local data = string.char( 0x86, 0x4f, 0xd2, 0x6f, 0xb5, 0x59, 0xf7, 0x5b ) t( toz85( data ), "HelloWorld" ) --https://github.com/msealand/z85.node/blob/master/test/encode.test.js t( toz85( "1234" ), "f!$Kw" ) --wrong length error local res, err = toz85( "abcdefghi" ) t( res, nil ) t( err, "invalid length: 9 - must be a multiple of 4" ) t()