input_binary_string = "110010111111111111101010" ## must be a multiple of 8
out = []
while len(input_binary_string) >= 8:
byte = input_binary_string[:8]
input_binary_string = input_binary_string[8:]
b = int(byte,2)
c = chr(b)
out.append(c)
## Better not have a bits left over
assert len(input_binary_string) == 0
outString = "".join(out)
print [ ord(c) for c in out ]
您可以使用^{} module 从任意布局构建二进制字符串。在
这只能生成字节对齐的结构,但无论如何,您需要对字节进行对齐才能在网络套接字上发送。在
编辑:
所以你生成的格式确实有不对齐的位8-1-1-2-12-16等等
为了发送一个套接字,你需要字节对齐,但是我想协议是如何处理的。(也许在某处加了填充物?)在
我的新建议是建立一个位字符串,然后将其切分为8位块并从那里进行转换:
Construct(http://construct.readthedocs.org/en/latest/)是二进制数据的解析器和生成器。它看起来确实是这个应用程序的理想选择,因为您可以从位和字节定义内容。它看起来还具有一些有用的特性,比如处理条件情况以及容易地检查终止符等等。在
我花了几年时间使用一个复杂的包创建和解析系统,它没有Construct所具有的一些特性,所以除非协议中有特别奇怪的东西,否则Construct似乎可以处理它。在
相关问题 更多 >
编程相关推荐