python处理二进制数据的方法
admin
2023-07-31 02:29:10
0

本文实例讲述了python处理二进制数据的方法。分享给大家供大家参考。具体如下:

#!/usr/env/env python 
#-*- coding: cp936 -*- 
\'\'\'\'\' 
add Head Infomation for pcm file 
\'\'\' 
import sys 
import struct 
import os 
__author__ = \'bob_hu, hewitt924@gmail.com\' 
__date__ = \'Dec 19,2011\' 
__update__ = \'Dec 19,2011\' 
def geneHeadInfo(sampleRate,bits,sampleNum): 
  \'\'\'\'\' 
  生成头信息,需要采样率,每个采样的位数,和整个wav的采样的字节数 
  \'\'\' 
  rHeadInfo = \'\\x52\\x49\\x46\\x46\' 
  fileLength = struct.pack(\'i\',sampleNum + 36) 
  rHeadInfo += fileLength 
  rHeadInfo += \'\\x57\\x41\\x56\\x45\\x66\\x6D\\x74\\x20\\x10\\x00\\x00\\x00\\x01\\x00\\x01\\x00\' 
  rHeadInfo += struct.pack(\'i\',sampleRate) 
  rHeadInfo += struct.pack(\'i\',sampleRate * bits / 8) 
  rHeadInfo += \'\\x02\\x00\' 
  rHeadInfo += struct.pack(\'H\',bits) 
  rHeadInfo += \'\\x64\\x61\\x74\\x61\' 
  rHeadInfo += struct.pack(\'i\',sampleNum) 
  return rHeadInfo 
if __name__ == \'__main__\': 
  if len(sys.argv) != 5: 
    print \"usage: python %s inFile sampleRate bits outFile\" % sys.argv[0] 
    sys.exit(1) 
  fout = open(sys.argv[4],\'wb\') #用二进制的写入模式 
  #fout.write(struct.pack(\'4s\',\'\\x66\\x6D\\x74\\x20\'))
  #写入一个长度为4的串,这个串的二进制内容为 66 6D 74 20 
  #Riff_flag,afd,fad,afdd, = struct.unpack(\'4c\',fin.read(4))
  #读入四个字节,每一个都解析成一个字母 
  #open(sys.argv[4],\'wb\').write(struct.pack(\'4s\',\'fmt \'))
  #将字符串解析成二进制后再写入 
  #open(sys.argv[4],\'wb\').write(\'\\x3C\\x9C\\x00\\x00\\x57\')
  #直接写入二进制内容:3C 9C 00 00 57 
  #fout.write(struct.pack(\'i\',6000)) #写入6000的二进制形式 
  #check whether inFile has head-Info 
  fin = open(sys.argv[1],\'rb\') 
  Riff_flag, = struct.unpack(\'4s\',fin.read(4)) 
  if Riff_flag == \'RIFF\': 
    print \"%s 有头信息\" % sys.argv[1] 
    fin.close() 
    sys.exit(0) 
  else: 
    print \"%s 没有头信息\" % sys.argv[1] 
    fin.close() 
    #采样率 
    sampleRate = int(sys.argv[2]) 
    #bit位 
    bits = int(sys.argv[3]) 
    fin = open(sys.argv[1],\'rb\') 
    startPos = fin.tell() 
    fin.seek(0,os.SEEK_END) 
    endPos = fin.tell() 
    sampleNum = (endPos - startPos) 
    print sampleNum 
    headInfo = geneHeadInfo(sampleRate,bits,sampleNum) 
    fout.write(headInfo) 
    fin.seek(os.SEEK_SET) 
    fout.write(fin.read()) 
    fin.close() 
    fout.close()

希望本文所述对大家的Python程序设计有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...