有时候我们要用到10进制与其他进制之间的转换,如10-16进制的转换。在此我编写了一个函数,可以方便的把10进制转换到其他进制。
函数为changejz(longshi,inthow)其中参数shi为要转换的10进制数据,how为要转换到的进制类型,取值为2,8,16三个,整个函数的返回值为string型。
大家都知道,要把10进制转换到诸如8进制,首先得转换到2进制,再由2进制转换到8进制,所以函数的第一步为:把输入的数据都由10进制转换到2进制。
2进制
8进制
10进制
16进制
10110010
262
178
B2
10110111011
2673
1467
5BB
函数整体代码如下:(以下列举数字时都以10进制1467为例子)
stringtwo,sixteen,eight//定义三个字符串变量,用来存放最后输出的进制值
longlentwo,duan,i,j
stringaa[50],a[50],b[4]//定义数组
//先把10进制数据通过取余数转换成2进制
//由于10进制到2进制的转换是通过取余数实现,所以这里用到的mod()函数,通过实//践,发现这样4行代码就可以把10进制转换到2进制
dowhileshi>0
two=twostring(mod(shi,2))
shi=shi/2
loop
choosecasehow//选择输出进制
case2//选择2进制
//由于上面得到的2进制的数据方向是相反的:11011101101,所以要通过reverse()函数重新//把它颠倒过来
two=reverse(two)//得到正确的2进制10110111011
returntwo//返回函数值
case8//选择8进制
//2进制到8进制的转换是这样的,从右往左每3位为一个段,即8进制的一位,
lentwo=len(two)//取2进制的长度
ifmod(lentwo,3)>0then//分段
duan=lentwo/31
else
duan=lentwo/3
endif
fori=duanto1step-1//由于没有颠倒过来的2进制是从右往左的,所以//分出来的段从左往右就是由大到小 财管家园,fs119.net
aa[duan]=mid(two,i*3-2,3)//取出每一段的2进制值
a[duan]='0'
forj=1to3
b[j]=mid(aa[duan],j,1)//每一段从右往左取值
ifb[j]<>''then
a[duan]=string(integer(a[duan])2^(j-1)*integer(b[j]))
//按照2^0*x2^1*x2^2*x
//x为分别为从右到左的2进制的值,累加得到每一段的8进制值
endif
next
eight=eighta[duan]//8进制段累加得到最后的8进制值
next
returneight
//16进制的方法如同8进制,只是每4位为一段而已
case16//16进制
lentwo=len(two)
ifmod(lentwo,4)>0then
duan=lentwo/41
else
duan=lentwo/4
endif
fori=duanto1step-1
aa[duan]=mid(two,i*4-3,4)
a[duan]='0'
forj=1to4
b[j]=mid(aa[duan],j,1)
ifb[j]<>''then
a[duan]=string(integer(a[duan])2^(j-1)*integer(b[j]))
endif
choosecaseinteger(a[duan])
case10
a[duan]='A'
case11
a[duan]='B'
case12
a[duan]='C'
case13
a[duan]='D'
case14
a[duan]='E'
case15
a[duan]='F'
endchoose
next
sixteen=sixteena[duan]
next
returnsixteen
caseelse
endchoose
有兴趣的朋友还可以把小数点右面的值也算出来,不过他为2的负次幂。以上代码在windows2000professionalpowerbuilder80下通过。
文章摘自网络,如有侵权,请与我们联系.
函数为changejz(longshi,inthow)其中参数shi为要转换的10进制数据,how为要转换到的进制类型,取值为2,8,16三个,整个函数的返回值为string型。
大家都知道,要把10进制转换到诸如8进制,首先得转换到2进制,再由2进制转换到8进制,所以函数的第一步为:把输入的数据都由10进制转换到2进制。
函数整体代码如下:(以下列举数字时都以10进制1467为例子)
财软 联盟 fs119.net
longlentwo,duan,i,j
stringaa[50],a[50],b[4]//定义数组
//先把10进制数据通过取余数转换成2进制
//由于10进制到2进制的转换是通过取余数实现,所以这里用到的mod()函数,通过实//践,发现这样4行代码就可以把10进制转换到2进制
dowhileshi>0
two=twostring(mod(shi,2))
shi=shi/2
loop
choosecasehow//选择输出进制
case2//选择2进制
//由于上面得到的2进制的数据方向是相反的:11011101101,所以要通过reverse()函数重新//把它颠倒过来
two=reverse(two)//得到正确的2进制10110111011
returntwo//返回函数值
case8//选择8进制
//2进制到8进制的转换是这样的,从右往左每3位为一个段,即8进制的一位,
lentwo=len(two)//取2进制的长度
ifmod(lentwo,3)>0then//分段
duan=lentwo/31
else
duan=lentwo/3
endif
fori=duanto1step-1//由于没有颠倒过来的2进制是从右往左的,所以//分出来的段从左往右就是由大到小 财管家园,fs119.net
aa[duan]=mid(two,i*3-2,3)//取出每一段的2进制值
a[duan]='0'
forj=1to3
b[j]=mid(aa[duan],j,1)//每一段从右往左取值
ifb[j]<>''then
a[duan]=string(integer(a[duan])2^(j-1)*integer(b[j]))
//按照2^0*x2^1*x2^2*x
//x为分别为从右到左的2进制的值,累加得到每一段的8进制值
endif
next
eight=eighta[duan]//8进制段累加得到最后的8进制值
next
returneight
//16进制的方法如同8进制,只是每4位为一段而已
case16//16进制
lentwo=len(two)
ifmod(lentwo,4)>0then
duan=lentwo/41
else
duan=lentwo/4
endif
fori=duanto1step-1
aa[duan]=mid(two,i*4-3,4)
a[duan]='0'
forj=1to4
b[j]=mid(aa[duan],j,1)
ifb[j]<>''then
a[duan]=string(integer(a[duan])2^(j-1)*integer(b[j]))
endif
choosecaseinteger(a[duan])
case10
a[duan]='A'
case11
a[duan]='B'
case12
a[duan]='C'
case13
a[duan]='D'
case14
a[duan]='E'
case15
财管家园 fs119.net
a[duan]='F'
endchoose
next
sixteen=sixteena[duan]
next
returnsixteen
caseelse
endchoose
有兴趣的朋友还可以把小数点右面的值也算出来,不过他为2的负次幂。以上代码在windows2000professionalpowerbuilder80下通过。
财软 联盟 fs119.net
数据统计中!!
Google.cn搜索关键字:
函数 转换 其他 编写 duan // 进制 case two lentwo if
Google.cn搜索相关文章:
谷歌中搜索全球网 PB中编写10进制到其他进制的转换函数
百度中搜索 PB中编写10进制到其他进制的转换函数
谷歌中搜索www.fs119.net PB中编写10进制到其他进制的转换函数
上一篇:用PowerBuilder开发多媒体播放器
Google.cn搜索相关文章:
谷歌中搜索全球网 PB中编写10进制到其他进制的转换函数
百度中搜索 PB中编写10进制到其他进制的转换函数
谷歌中搜索www.fs119.net PB中编写10进制到其他进制的转换函数
下一篇:没有了
精品课程推荐
相关文章
PB中编写10进制到其他进制的转换函数 2007-06-15 11:16:53 用PowerBuilder开发多媒体播放器 2007-06-15 11:16:52 Powerbuilder中利用API实现动画特效 2007-06-15 11:16:51 用PowerBuilder6.0建立B/S结构的应用程序 2007-06-15 11:16:50 在POWERBUILDER中使用WINSOCK控件的方法 2007-06-15 11:16:49 用PB5设计串口通讯程序 2007-06-15 11:16:49
每日新新闻索引
最新主题
推荐大折扣培训课程