在网上搜不到关于 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