PB powerbuilder 进制转换 url 编码 解码 urlencode urldecode 数组排序

 

关键字: 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

 

你可能感兴趣的:(我的收藏,powerbuilder,url,function,string,encoding)