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