串行Python3上的二进制表示



我正在以ascii表示的形式在串行上写入各种字节。

这里有一个例子:bytes_to_write = 'aa' # Will write 01010101

现在我发送的一部分内容涉及计算需要传输的4个字节,我使用以下函数计算字节:

def convert_addr_with_flag(addr, flag):
    if(addr[0:1]!="0x"):
        # String does not have hex start, for representation
        addr = "0x" + addr
    # Convert String to int
    return binascii.unhexlify(str(hex(int(addr, 16) + (flag << 31))[2:].zfill(8)))  # Return the int value, bit shiffted with flag

这个函数将返回一个二进制字符串而不是ascii字符串。这里有一个例子……convert_addr_with_flag("00ACFF21", 1) # Output: b'x80xacxff!'

我的问题是如何将此输出转换为可以添加到数据包的其他字节的形式。例如. .

part_1 = 'xaaxaa' # 2 bytes
part_2 = 'x55x55' # 2 bytes
part_3 = convert_addr_with_flag("00ACFF21", 1) # 4 bytes
full_packet = part_1 + part_2 + part_3 # Will not work, as part_3 is a binary string (b'x80xacxff!)

这是我已经尝试过的,使用decode("UTF-8)和UTF-16和ASCII。它无法理解字节字符串。切片。使用[2]给我一个二进制字符,但不是'第二个字节'

任何提示将非常感激!

Python 3.4

decode不工作,因为没有part_3的ascii表示;ASCII字符必须是0 ~ 127之间的整数。在这个例子中,part_3看起来是b'x80xacxff!';前三个字节是128、172和255,它们都不是有效的ascii。

如果你需要发送不在0到127之间的字节,你可能需要part_1part_2是字节字符串。

最新更新