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))
为什么下面的代码会导致 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))