在lua中常用到的几个小函数

来源:互联网 发布:iphone7plus在线软件 编辑:程序博客网 时间:2024/05/01 06:50

local cjson         = require("cjson")
local iconv         = require("iconv")
local zhttp         = require("resty.http")

--16进制转换为短类型

function hex2short(hex)

        local len0 = string.byte(hex,1);
        local len1 = string.byte(hex,2);
        local len2 = len0*256 + len1;
        return len2;

end

--16进制转换为int类型

function hex2int(hex)
        local len0 = string.byte(hex,1);
        local len1 = string.byte(hex,2);
        local len2 = string.byte(hex,3);
        local len3 = string.byte(hex,4);
        local len4 = len0 + len1*256 + len2*256*256 + len3*256*256*256;
        return len4;
end
function hex2short_r(hex)
        local len0 = string.byte(hex,1);
        local len1 = string.byte(hex,2);
        local len2 = len1*256 + len0;
        return len2;
end
function hex2int_r(hex)
        local len0 = string.byte(hex,1);
        local len1 = string.byte(hex,2);
        local len2 = string.byte(hex,3);
        local len3 = string.byte(hex,4);
        local len4 = len3 + len2*256 + len1*256*256 + len0*256*256*256;
        return len4;
end

--16进制转换为字符串
function hex2str(hex)
 local str = "";
 for i = 1, string.len(hex) do
     local charcode = tonumber(string.byte(hex, i, i));
     str = str .. string.format("%02X", charcode);
 end
 return str;


end

--按位填充
function myfillstr(align, pad, setlen, str)
  local padstr = "";
  local valstr = "";
  while setlen > padstr:len() do
    padstr = padstr .. pad;
    --debug("padstr:" .. padstr);
  end


  if align == "L" then

    valstr = padstr .. str;
    valstr = string.sub(valstr, str:len()+1, setlen+str:len());
  else

    valstr = str .. padstr;
    valstr = string.sub(valstr, 1, setlen);
  end
 return valstr;
end

--按字符拆分
function split(pString, pPattern) 


    local Table = {}


    local fpat = "(.-)" .. pPattern
    local last_end = 1
    local s, e, cap = pString:find(fpat, 1)


    while s do
        --if s ~= 1 or cap ~= "" then
            table.insert(Table,cap)
        --end


        last_end = e+1
        s, e, cap = pString:find(fpat, last_end)
    end


    if last_end <= #pString then
        cap = pString:sub(last_end)
        table.insert(Table, cap)
    end


    return Table
end

--字符串转换为16位
function str2hex(str)
 local hex = "";
 for i = 1, string.len(str) - 1, 2 do
     local doublebytestr = string.sub(str, i, i+1);
     local n = tonumber(doublebytestr, 16);
     if 0 == n then
       hex = hex .. '\00';
     else
       hex = hex .. string.format("%c", n);
     end
 end
 return hex;

end

--URL decode 转换

function escape(s)
    return string.gsub(s, "([^A-Za-z0-9_])", function(c) return string.format("%%%02x", string.byte(c)) end)
end

--URL encode
function unescape(s)
    return string.gsub(s, "%%(%x%x)", function(hex) return string.char(tonumber(hex, 16)) end)
end

--bcd展开
function to_hex(str)
    return str:gsub(".", function(c) return string.format("%02X", c:byte(1)) end)
end

--bcd压缩
function to_bin(str)
    return str:gsub("..", function(x) return string.char(tonumber(x, 16)) end)
end

--utf-8转换gbk
function u8_to_gbk(s)
    return iconv.new("gbk", "utf-8"):iconv(s)
end

--gbk转utf-8
function gbk_to_u8(s)
    return iconv.new("utf-8", "gbk"):iconv(s)
end

0 0
原创粉丝点击