使用此代码获取字符串并将其转换为二进制:
bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in 'hello'), 0))
Run Code Online (Sandbox Code Playgroud)
这个输出:
0b110100001100101011011000110110001101111
Run Code Online (Sandbox Code Playgroud)
哪个,如果我把它放到这个网站(在右边的网站上),我得到了我的hello回信息.我想知道它使用什么方法.我知道我可以将二进制字符串拼接成8位,然后将其与相应的值bin(ord(character))或其他方式匹配.真的在寻找更简单的东西.
我有一个非负的int,我想有效地将它转换为包含相同数据的big-endian字符串.例如,int 1245427(0x1300F3)应该生成一个长度为3的字符串,其中包含三个字符,其字节值为0x13,0x00和0xf3.
我的整数是35(基数为10)的数字.
我该怎么做呢?
我正在尝试将YCbCr 文件 从 8 bpp 转换为 10 bpp。
到目前为止,我最好的方法仍然比最基本的 C 实现慢几个数量级。
C 中的朴素方法,运行时间约为 8 秒。相反,让代码在块上运行,可以将时间大大缩短到 1 秒以下。
我很好奇处理二进制文件的标准 python 可以获得什么样的性能。示例文件采用CIF 分辨率,与 1080p 的内容相比“小”。尽管我主要对标准 python 感兴趣,但也可以随意添加 numpy-suggestions。
测试文件可以从以下位置下载
http://trace.eas.asu.edu/yuv/foreman/foreman_cif.7z
Run Code Online (Sandbox Code Playgroud)
sha1sum正确的 10 位输出是
c511dabc793383f7fd0ed69b4bb9b9f89ef73b84
Run Code Online (Sandbox Code Playgroud)
Python:
#!/usr/bin/env python
import array
f_in = 'foreman_cif.yuv'
f_out = 'py_10bpp.yuv'
def bytesfromfile(f):
while True:
raw = array.array('B')
raw.fromstring(f.read(8192))
if not raw:
break
yield raw
with open(f_in, 'rb') as fd_in, \
open(f_out, 'wb') as fd_out:
for byte in bytesfromfile(fd_in):
data = []
for i …Run Code Online (Sandbox Code Playgroud)