将整数列表转换为 bytes/ascii 字符串并返回?快速地?
convert list of integers to bytes/ascii string and back ? Fast?
我正在尝试将数字列表转换为字符串并反转。这就是我得到的结果
def nums2ascii(nums,size=2):
return b''.join([n.to_bytes(size,'big') for n in nums ])
def ascii2nums(ascii,size=2):
return [int.from_bytes(ascii[i:i+size],'big') for i in range(0,len(ascii),size)]
第一个问题是这是最慢的方法
我读到要走的路是使用 struct module 来加快速度。助记词太多了,怎么简单2,4,8。我读对了吗 '>I', '>R', '>Q' ?
我可以直接将列表传递给 pack/unpack 而不是进行列表理解吗?
我的第二个问题是如何透明地处理 int8、int16、int32、int64 ...我是坚持使用最大的还是我决定坚持使用整个应用程序中的特定一个/在这种情况下我必须断言!!
我会做这样的事情,假设系统短“h”是两个字节(通常是):
import struct
def nums2bytes(nums):
return struct.pack(f">{len(nums)}h", *nums)
def bytes2nums(b):
return struct.unpack(f">{len(b)//2}h", b)
您或许可以构建这样的功能,即 2 是“h”,4 是“i”等。请注意,大写字母表示无符号整数,小写字母表示有符号整数。
另一种方法是安装 numpy 并使用 numpy 数组。
我正在尝试将数字列表转换为字符串并反转。这就是我得到的结果
def nums2ascii(nums,size=2):
return b''.join([n.to_bytes(size,'big') for n in nums ])
def ascii2nums(ascii,size=2):
return [int.from_bytes(ascii[i:i+size],'big') for i in range(0,len(ascii),size)]
第一个问题是这是最慢的方法
我读到要走的路是使用 struct module 来加快速度。助记词太多了,怎么简单2,4,8。我读对了吗 '>I', '>R', '>Q' ? 我可以直接将列表传递给 pack/unpack 而不是进行列表理解吗?
我的第二个问题是如何透明地处理 int8、int16、int32、int64 ...我是坚持使用最大的还是我决定坚持使用整个应用程序中的特定一个/在这种情况下我必须断言!!
我会做这样的事情,假设系统短“h”是两个字节(通常是):
import struct
def nums2bytes(nums):
return struct.pack(f">{len(nums)}h", *nums)
def bytes2nums(b):
return struct.unpack(f">{len(b)//2}h", b)
您或许可以构建这样的功能,即 2 是“h”,4 是“i”等。请注意,大写字母表示无符号整数,小写字母表示有符号整数。
另一种方法是安装 numpy 并使用 numpy 数组。