当前位置: 首页 > news >正文

字节数据转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)

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


http://www.mrgr.cn/news/33486.html

相关文章:

  • 【基础算法总结】模拟篇
  • C++之模版的进阶
  • arm-硬件
  • 240922-Conda的在线下载与离线安装
  • LeetcodeTop100 刷题总结(二)
  • 如何用Shell命令结合 正则表达式 统计文本中的ip地址数量
  • 【LeetCode热题100】位运算
  • MELON的难题- 华为OD统一考试(E卷)
  • Cpp类和对象(中)(4)
  • TryHackMe 第3天 | Pre Security (二)
  • 微信小程序教程:如何在个人中心实现头像贴纸功能
  • 英语(二)-写作常用词汇和句型范文
  • [Linux]用户管理指令
  • 2024/9/22 英语每日一段
  • [JavaEE] 网络编程----UDP / TCP 回显服务器
  • 华为OD机试 - N个选手比赛前三名、比赛(Python/JS/C/C++ 2024 E卷 100分)
  • 【原创】java+swing+mysql仓库管理系统设计与实现
  • 238 除自身以外数组的乘积
  • Oracle(139)如何创建和管理数据库用户?
  • 【Elasticsearch系列十九】评分机制详解