利用PowerBasic编写两个整数型进制相互转换的函数

系列文章目录

关于二进制,八进制,十进制,十六进制间相互转换


前言

闲暇无事利用PB按机制转换规则,编写了两个整数类型相互转换的自定义函数,当然在日常编程中很少使用到,因为编译器会自动帮助我们完成转换工作。自己编程实现的目的主要是加深对于进制间转换的理解。


一、进制是什么?

进制也就是进位计数制,是人为定义的带进位的计数方法。

对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),它们所代表的数值都是一样的。

对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

二、实现算法

1.二进制、八进制、十六进制转十进制算法

代码如下(示例):

'-------------------------------------------------------------------------
' 整数型2,8,16进制转10进制
'-------------------------------------------------------------------------
FUNCTION OtherToDecimal(BYVAL bType AS BYTE, BYVAL Value AS STRING) AS QUAD
    LOCAL i      AS BYTE
    LOCAL n      AS BYTE
    LOCAL bi     AS BYTE
    LOCAL a      AS LONG
    LOCAL length AS BYTE
    LOCAL sValue AS STRING
    LOCAL p      AS BYTE PTR

    IF bType=2 OR bType=8 OR  bType=10 OR bType=16 THEN
        GOTO calcu
        ELSE
            FUNCTION = 0
            EXIT FUNCTION
    END IF

    calcu:
    a = 0
    Value = REMOVE$(Value, $SPC)
    p      = STRPTR(Value)
    length = LEN(Value)-1

    FOR i=0 TO length
        bi = @p[length-i]
        SELECT CASE bi
            CASE 48 TO 57
                n = VAL(CHR$(bi))  '取得位值

            CASE 65 TO 102 '针对16进制9以上的数字转换为对应字母符号
                IF bi=65 OR bi=97  THEN n=10  'A
                IF bi=66 OR bi=98  THEN n=11  'B
                IF bi=67 OR bi=99  THEN n=12  'C
                IF bi=68 OR bi=100 THEN n=13  'D
                IF bi=69 OR bi=101 THEN n=14  'E
                IF bi=70 OR bi=102 THEN n=15  'F

        END SELECT
        a = a + (bType^i)*n  '进制运算
    NEXT i

    FUNCTION = a
END FUNCTION   

函数调用实例如下:
'--------------------------------
'二进制转十进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
s = "110110"
b = OtherToDecimal(2, s)
MSGBOX STR$(b) 
'返回结果 54

'--------------------------------
'八进制转十进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
s = "127"
b = OtherToDecimal(8, s)
MSGBOX STR$(b) 
'返回结果 87

'--------------------------------
'十六进制转十进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
s = "45CF"
b = OtherToDecimal(16, s)
MSGBOX STR$(b) 
'返回结果 17871                                

2.十进制转二进制、八进制、十六进制算法

代码如下(示例):

'-------------------------------------------------------------------------
' 整数型10进制转2,8,16进制整形
'-------------------------------------------------------------------------
FUNCTION DecimalToOther(BYVAL bType AS BYTE, BYVAL Value AS QUAD) AS STRING
    LOCAL bi     AS BYTE
    LOCAL length AS BYTE
    LOCAL s      AS STRING
    LOCAL sValue AS STRING

    IF bType=2 OR bType=8 OR bType=16 THEN
        GOTO calcu
        ELSE
            FUNCTION = ""
            EXIT FUNCTION
    END IF

    calcu:
    s = ""
    sValue = ""
    WHILE Value>0                  '直到商数为0则退出循环
        bi = (Value MOD bType)     '取余数
        Value = FIX(Value/bType)   '取商数
        SELECT CASE bi
            CASE 10 TO 15
                IF bi=10 THEN s="A"
                IF bi=11 THEN s="B"
                IF bi=12 THEN s="C"
                IF bi=13 THEN s="D"
                IF bi=14 THEN s="E"
                IF bi=15 THEN s="F"
            CASE ELSE
                s = STR$(bi)
        END SELECT
        sValue = sValue + s
    WEND
    sValue = REMOVE$(STRREVERSE$(sValue),$SPC)

    FUNCTION = sValue
END FUNCTION 

'--------------------------------
'十进制转二进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
b = 125 
s = DecimalToOther(2, b)
MSGBOX s 
'返回结果 1111101

'--------------------------------
'十进制转八进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
b = 125 
s = DecimalToOther(8, b)
MSGBOX s 
'返回结果 175

'--------------------------------
'十进制转十六进制,字符形式回显
'--------------------------------
LOCAL s AS STRING
LOCAL b AS LONG
b = 125 
s = DecimalToOther(16, b)
MSGBOX s 
'返回结果 7D                        


总结

二进制:它由两个数码0,1组成,二进制数运算规律是逢二进一。

八进制:它由两个数码0、1、2、3、4、5、6、7组成,八进制数运算规律是逢八进一。

十六进制:采用的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A-F分别表示十进制数字10-15.十六进制数的技术规则是逢十六进一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值