关键字: PBpowerbuilder进制转换url编码urlencodeurldecode数组排序
环境:PB 12--powerbuilder 12
一直想发出来共享一下:
自己写的的用户对象,PB直接导入就可以用了,可能有bug,请大家一块学习
函数(及参数) 作用
decto 将十进制数字转成其它进制字符串(支持小数位)
例:将十进制换成二进制 2-->10
todec 将指定进制的数字转换成10进制(支持小数位)
例:将二进制换成十进制 10-->2
hexdecode 将16进制字符串以指定字符集进行解码成字符
例:ANSI的CFC4-->"夏"
utf8的E5 A4 8F-->"夏"
hexencode 将字符串指定字符集进行编码成16进制字符串
例:ANSI的"夏"-->CFC4
utf8的"夏"-->E5 A4 8F
urldecode 将指定字符串以进行指定字符集url解码
例:ANSI的http://runsa.cn/?uid=a夏-->http://runsa.cn/?uid=a%CF%C4
utf8的http://runsa.cn/?uid=a夏-->http://runsa.cn/?uid=a%E5%A4%8F
urlencode 将指定字符串以进行指定字符集url编码
例:ANSI的http://runsa.cn/?uid=a%CF%C4-->http://runsa.cn/?uid=a夏
utf8的http://runsa.cn/?uid=a%E5%A4%8F-->http://runsa.cn/?uid=a夏
arraysort 对一维数组进行排序
例:略
具体参数:
public function any arraysort (any a[], readonly string as_sort)
public function decimal todec (string as_num, decimal ad_sys)
public function string decto (decimal ad_dec, readonly unsignedinteger aui_sys)
public function string urlencode (character as_text[], encoding ae_encode)
public function string hexdecode (character ac_text[], encoding ae_encode)
public function string hexencode (string as_text, readonly encoding ae_encode)
public function string urldecode (character as_text[], encoding ae_encode)
下载地址:
http://download.csdn.net/source/3429501
public function string urlencode (character as_text[], encoding ae_encode);//对中文字符进行url 编码
//参数1:要编码的字符串
//参数2:要以哪种字符集编码
char lc_ret[]
string ls_ret
long i,j,li_len
string ls_temp
if match(as_text[],'^[\-\_\.A-Za-z0-9]*$')=true then
ls_ret=as_text[]
else
for i=1 to upperbound(as_text)
if match(as_text[i],'[\-\_\.A-Za-z0-9]')=false then
ls_temp=hexencode(as_text[i],ae_encode)
li_len=len(ls_temp)
li_len=li_len + li_len / 2 //增加百分号以后长度会增加1/2
for j=1 to li_len step 3
ls_temp=replace(ls_temp,j,0,'%')
next
else
ls_temp=as_text[i]
end if
ls_ret+=ls_temp
next
end if
return ls_ret
end function
public function string hexencode (readonly string as_text, readonly encoding ae_encode);//将字符转换成16进制编码
//参数1:是要转换的字符
//参数2:源字符中编码
//返回16进制编码
byte lb_array[]
char lc_result[]
lb_array[]=getbytearray(blob(as_text,ae_encode))
hexencode(lb_array[],lc_result[])
return lc_result[]
end function
public function integer hexencode (ref byte lb_array[], ref character lc_result[]);//将字符转换成16进制编码
//参数1:是要转换的字符
//参数2:源字符中编码
//返回16进制编码
long l_len,i,l_num
char lc_temp[2]
l_len=upperbound(lb_array[])
for i=1 to l_len
l_num= (2 * i) - 1
if lb_array[i]<16 then //小于16的要补0
lc_temp[1]='0'
lc_temp[2]=decto(lb_array[i],16)
else
lc_temp[]=decto(lb_array[i],16)
end if
lc_result[l_num]=lc_temp[1]
lc_result[l_num + 1]=lc_temp[2]
next
return l_len*2
end function
public function string decto (decimal ad_dec, readonly unsignedinteger aui_sys);//作用:将十进制数字转成其它进制字符串
//参数1:十进制数字
//参数2:目标进制
string ls_ret //返回的结果
string ls_dec
string ls_left,ls_right,ls_mod
uint ld_mod /*余数为整数*/
dec ld_mul //取小数的乘积为dec
int i,li_pos,li_len,li_pointpos,li_maxpower,li_minpower
if isnull(ad_dec) or isnull(aui_sys) or aui_sys<2 then goto e
ls_dec=string(ad_dec)
li_pointpos=pos(ls_dec,'.')
if li_pointpos=0 then
if ad_dec9 and ad_dec9 then
ls_ret=char(64 - 9 + ad_dec)+ls_ret
else
ls_ret=string(ad_dec)+ls_ret
end if
end if
else
ls_left=mid(ls_dec,1,li_pointpos) //取整数
ls_right=mid(ls_dec,li_pointpos) //取小数
ls_ret=decto(dec(ls_left),aui_sys)+'.' //整数部分转换
ld_mul=dec(ls_right)
for i=1 to 10 //最大精度为10
ld_mul=ld_mul * aui_sys
ls_ret=ls_ret+string(int(ld_mul)) //取整
if ld_mul=int(ld_mul) then exit //没有余数
ld_mul=ld_mul - int(ld_mul) //去除整数
next
end if
e:
return ls_ret
end function