字节数据转16进制对应十进制数
在数据处理中经常面临字节数据需要转换成不同位宽的十进制数据,尤其是在嵌入式处理中该现象特别常见,这里以转换为16位位宽的十进制为例,采用python校本进行数据转换,具体数据如下:
要将上面数据转换为双字节十进制数据,应该先划分出各个单字节数据,然后将单字节数据两两组合成为双字节数据,最后将双字节数据转换为十进制数据,具体实现如下:
import numpy as np
import ctypes
import soundfile as sf
import struct
import binasciidef 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 datafilename = 'test.bin'
data = readfile(filename)
samplerate = 32000
sf.write('test.wav', data.clip(-32768,32767).astype(np.int16), samplerate)
上面程序是将单字节文本数据解析为双字节音频文件