sum() 的字节总和

sum of bytes with sum()

为什么下面的代码会导致 TypeError

a = b'\x01'
b = b'\x02'
_tuple = (a, b)
sum(_tuple)

TypeError: unsupported operand type(s) for +: 'int' and 'bytes'

虽然 a 和 b 都是字节(用 type(a)

快速检查

就像 sum(_tuple, b'[=16=]') 的错误说:

您需要改用 b''.join(_tuple)

错误信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum bytes [use b''.join(seq) instead]

编辑:
允许完成实际请求的计算。

辅助函数:

def split_int(num, split):
    """convert base-10 int to other bases and return digits in a list"""
    res = []
    exp = 1
    while exp < num:
        trunc = exp
        exp *= split
        current_num = num % exp // trunc
        res.insert(0, current_num)
    return res

首先你需要将bytes转换为int:

def sum_bytes(*bytes):
    """sum bytes"""
    int_list = [int.from_bytes(byte, 'big') for byte in bytes]
    # use 'little' if the smallest byte comes first.

然后你需要对整数求和:

    int_sum = sum(int_list)

最后您需要将它们重新转换为字节。结果是 > 256 你需要上面的辅助函数:

    byte_sum = bytes(split_int(int_sum, 256))
    return byte_sum

更压缩的代码是:

def split_int(num, split):
    """convert base-10 int to other bases and return digits in a list"""
    res = []
    exp = 1
    while exp < num:
        trunc = exp
        exp *= split
        current_num = num % exp // trunc
        res.insert(0, current_num)
    return res

def sum_bytes(*bytes):
    """sum bytes"""
    int_sum = sum((int.from_bytes(byte, 'big') for byte in bytes))
    return bytes(split_int(int_sum, 256))