用户名: 密码: 验证码: gdcode 注册

PB中编写10进制到其他进制的转换函数

时间:2007-06-15 来源: 作者: 【字体: 减小 增大点击: 收藏 | 投稿
  
有时候我们要用到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//定义三个字符串变量,用来存放最后输出的进制值

财软 联盟 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


文章摘自网络,如有侵权,请与我们联系.
数据统计中!!
上一篇:用PowerBuilder开发多媒体播放器
下一篇:没有了

精品课程推荐



用户名: 密码: 匿名? 注册