Python Ascii to bcd bcd to Ascii

在网上搜不到关于 Ascii 和 bcd互相转化的文章,于是自己写了一个,和大家分享下。

 

没有考虑到效率,能够优化的地方望大家提出

 


"""
    AscII字符转换为BCD字符
"""
def asc2bcd(inAsc, pad_L0_R1 = 0):
#全部转换为大写,为后面的转换提供方便
    inAsc = inAsc.upper()
    print inAsc

#判断如果非偶数个字符时,左补0,还是右补0
    import copy
    if(len(inAsc)%2 == 1):
        if(pad_L0_R1 == 0):
            inAsc = copy.copy('0'+inAsc)
        if(pad_L0_R1 == 1):
            inAsc = copy.copy(inAsc+'0')
           
       

#检测输入的p字符串中是否都为0-9 a-f A-F 中的字符
    for i in inAsc:
        if ((i>='0')and(i<='9')):
            continue;
         
        if ((i>='A')and(i<='F')):
            continue

        print "输入了非0-9 a-f A-F 中的字符"
        return
               
   
    a = array.array('B', inAsc)
    v = array.array('B','/x00'*1000)

    length = 0
    b = 0
    c = 0
   
    for i in range(0, len(inAsc), 2):

        if ((a[i]>=ord('0'))&(a[i]<=ord('9'))):
            b = 0x30
        else:
            b = ord('A')-10
           
        if ((a[i+1]>=ord('A'))and(a[i+1]<=ord('F'))):
            c = ord('A')-10
        else:
            c = 0x30
           
        v[i/2] = ((a[i]-b)<<4 ) + (a[i+1]-c)
        print ":::::%x" %v[i/2]
        length += 1


#返回一个字符串
    return [v.tostring(), length]
    return [v[0:length], length]

'''
if __name__ == "__main__":
    a = asc2bcd("12234567890a")
    print '%x' %(ord(a[0][0]))
'''

'''
将BCD转换为ASC字符
'''
def Byte( Value ):
    if(type(Value) == type('')):
        return ord(Value[0])

   
"""
    BCD转换为ASCII字符
"""
def bcd2asc(inBcd):
    b = []
   
    tmpAsc = [(/
            str((Byte(i)&0xf0)>>4),/
            str((Byte(i)&0x0f))/
                ) for i in inBcd/
              ]
    for i in range(len(tmpAsc)):
        for j in range(len(tmpAsc[0])):
            b.append(tmpAsc[i][j])

    for i in range(len(b)):
        value = b[i]
        if int(value)==10: b[i] = chr(ord('a'))  
        if int(value)==11: b[i] = str('b')
        if int(value)==12: b[i] = str('c')
        if int(value)==13: b[i] = str('d')
        if int(value)==14: b[i] = str('e')
        if int(value)==15: b[i] = str('f')

    rStr = ''
    for i in range(len(b)):
        rStr += b[i]
   
    return rStr

if __name__ == "__main__":
    a = bcd2asc("/x78/x0a/xbc/xde/xf2")
    print a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值