PyAudio字节流格式解析及字节与整数转换差异的技术咨询
PyAudio字节流格式疑问解答
问题1:为何\r转13、\x0b转11,转换规则是什么?
这是ASCII码与字节的标准对应关系,和十六进制转换本质一致:
- Python打印
bytes类型时,会对字节做两种可读性优化处理:- 如果字节对应可打印的ASCII字符(比如
y对应ASCII码121),就直接显示字符本身; - 如果字节是不可打印的控制字符,会用转义序列表示:
\r是回车符的转义写法,对应的ASCII十进制值就是13;\x0b是十六进制表示的字节(0x0B),转成十进制就是11,对应垂直制表符;- 同理
\n(换行符,十进制10)、\t(制表符,十进制9)都是ASCII控制字符的标准转义写法。
你看到的整数数组,就是把每个字节直接转换成对应的十进制ASCII值,和字节流的转义表示完全等价。
- 如果字节对应可打印的ASCII字符(比如
问题2:打印的原始字节流为何没包含整数数组末尾的部分数值?
其实没有缺失,只是字节流的打印用了转义字符代替了直观的十六进制表示,两者是一一对应的:
拿第一组输出举例:
字节流b'y\x0b\xdc\x0b\xaf\x0b.\n"\t'对应的整数数组[121, 11, 220, 11, 175, 11, 46, 10, 34, 9]:
y→ 121,\x0b→11,\xdc→220,\xaf→175;.是可打印字符,对应ASCII码46;\n是换行符,对应10;"是双引号,对应34;\t是制表符,对应9。
第二组的\r对应13、\x00对应0,也是同样的道理。你觉得“缺失”的部分,只是被转成了更易读的转义字符而已,字节本身没有丢失。
内容的提问来源于stack exchange,提问作者yib
相关产品推荐
相关产品推荐

