python读取二进制文件以及二进制、十进制、16进制间的转化

多的不解释了直接上代码

#!/usr/bin/python
#-*-coding:utf-8-*-

import struct

###知识点说明####
# dec,=struct.unpack('B',binChar) 二进制字节数据转为十进制
# bin(dec) 十进制转为二进制
# hex(dec) 十进制转为16进制
# int('0x10', hexData) 16进制转十进制
# binData=struct.pack('B',HexByte) 16进制字节转二进制字节
# struct的使用参考链接:http://www.cnblogs.com/jiangzhaowei/p/6138866.html

# 十六进制数据转二进制字节流,如efefef作为参数进行转化
def HexToBin(hexData):
    Hex_byteString = ''
    binData = ''
    while hexData:
        Hex_byteString = hexData[0:2]  # 分割字符串,获取前两个字符
        Hex_byte = int(Hex_byteString, 16)  # 字符串转换成16进制
        binData += struct.pack('B', Hex_byte)  # 转换成字节流,“B“为格式符,代表一个unsigned char (具体请查阅struct)
        hexData = hexData[2:]  # 分割字符串,去掉字符串前两个字符
    return binData

def ShowByte(num):
    Bin_voicePackage = ""
    Hex_voicePackage = ""
    for i in range(num):
        voiceString = str(voiceArray[i])
        print "===============" 
        a,=struct.unpack('B',voiceString) #二进制字节转为十进制正整数
        print('Bin is:'+voiceString) #显示存储的二进制字节
        print('Dec is:'+str(a)) #显示转化成的十进制正整数
        print('Hex is:'+hex(a)) #显示转化成的16进制数据
        Bin_voicePackage+=str(a) #连接十进制数据
        Hex_voicePackage+=hex(a) #连接十六进制数据
    print ''.join(voiceArray[:num])
    print Bin_voicePackage
    print Hex_voicePackage

def DoSomething(readData):
    global voiceArray
    voiceArray.append(readData)

if __name__ == '__main__':
    voiceArray = []
    
    #二进制文件读取
    binfile = open('voice.spx', 'rb')
    try:
        while True:
            readData = binfile.read(1)
            if not readData:
                break
            DoSomething(readData)
    finally:
        binfile.close()

    #获取前n个字符,并分别用二进制、十进制、十六进制显示,并展现这些字符的连接显示
    n=5
    ShowByte(n)


你可能感兴趣的:(Python)