字节数据转16进制对应十进制数

在数据处理中经常面临字节数据需要转换成不同位宽的十进制数据,尤其是在嵌入式处理中该现象特别常见,这里以转换为16位位宽的十进制为例,采用python校本进行数据转换,具体数据如下:
单字节数据
要将上面数据转换为双字节十进制数据,应该先划分出各个单字节数据,然后将单字节数据两两组合成为双字节数据,最后将双字节数据转换为十进制数据,具体实现如下:

import numpy as np
import ctypes
import soundfile as sf
import struct
import binascii


def readfile(filename):
    f = open(filename,'r')
    lines = f.readlines() #按行读取文件
    
    data = []
    for line in lines:

        #line1 = line.split('\n')[0].strip()
        line = line.strip().split('\n')[0]
        line = line.split(' ') #分离出每一行的单字节

        print('line = ',line)

        new_line = []
        if len(line) == 15: #特殊情况处理,由于给定的测试文本存在个别不规范格式数据
            for i in range(0, len(line)):
                if len(line[i]) == 4:
                    new_line.append(line[i][:2])
                    new_line.append(line[i][2:])
                elif len(line[i]) == 3:
                    new_line.append(line[i][:1])
                    new_line.append(line[i][1:])
                else:
                    new_line.append(line[i])
        else:
            new_line = line.copy()


        line = new_line.copy()
        print('newline = ',line)

        for i in range(0, 16,2):
            if line[i] == '':
                line[i] = '00'
            if line[i + 1] == '':
                line[i + 1] = '00'

            if len(line[i]) == 1:
                line[i] = '0' + line[i]
            if len(line[i + 1]) == 1:
                line[i + 1] = '0' + line[i + 1]

            byte_merge_str = line[i + 1] + line[i] #组合双字节数据
            
            tmp_val = struct.unpack('<h', bytes.fromhex(byte_merge_str))[0] #转换为十进制数据
            data.append(tmp_val)
        
    data = np.array(data)
    return data




filename = 'test.bin'
data = readfile(filename)
samplerate = 32000
sf.write('test.wav', data.clip(-32768,32767).astype(np.int16), samplerate)

上面程序是将单字节文本数据解析为双字节音频文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值