webmcp
view framework/env/encode/mime/base64.lua @ 522:349991337008
Fixed typo
| author | jbe | 
|---|---|
| date | Mon Aug 21 20:23:12 2017 +0200 (2017-08-21) | 
| parents | 9fdfb27f8e67 | 
| children | 
 line source
     1 local alphabet = {
     2   "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
     3   "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
     4   "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
     5   "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
     6   "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"
     7 }
     9 function encode.mime.base64(str)
    10   local parts = {}
    11   local pos = 1
    12   local block_count = 0
    13   while pos <= #str do
    14     local s = string.sub(str, pos, pos + 2)
    15     local n = 0
    16     for i = 1, 3 do
    17       n = n * 256
    18       if i <= #s then
    19         n = n + string.byte(string.sub(s, i, i))
    20       end
    21     end
    22     parts[#parts+1] = alphabet[math.floor(n / 262144) + 1]
    23     parts[#parts+1] = alphabet[math.floor(n / 4096) % 64 + 1]
    24     if #s > 1 then
    25       parts[#parts+1] = alphabet[math.floor(n / 64) % 64 + 1]
    26     else
    27       parts[#parts+1] = "="
    28     end
    29     if #s > 2 then
    30       parts[#parts+1] = alphabet[n % 64 + 1]
    31     else
    32       parts[#parts+1] = "="
    33     end
    34     block_count = block_count + 1
    35     if block_count == 19 then
    36       parts[#parts+1] = "\r\n"
    37       block_count = 0
    38     end
    39     pos = pos + #s
    40   end
    41   if block_count > 0 then
    42     parts[#parts+1] = "\r\n"
    43   end
    44   return table.concat(parts)
    45 end
