将整数列表转换为字节/ASCII字符串并返回?快速地?
Posted
技术标签:
【中文标题】将整数列表转换为字节/ASCII字符串并返回?快速地?【英文标题】:convert list of integers to bytes/ascii string and back ? Fast? 【发布时间】:2021-06-23 03:38:59 【问题描述】:我正在尝试将数字列表转换为字符串并反转..这就是我得到的
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 模块来加快速度。助记词太多了,怎么简单2,4,8.我读对了 '>I', '>R', '>Q' 吗? 我可以直接将列表传递给打包/解包而不是进行列表理解吗?
我的第二个问题是如何透明地处理 int8、int16、int32、int64 ......我是坚持使用最大的还是决定在整个应用程序中坚持使用特定的 / 在这种情况下我必须提出断言!!
【问题讨论】:
您可能想查看array
模块。
第二个函数体可以变成[int.from_bytes(ascii[i:i+size], 'big') for i in range(0, len(ascii), size)]
,不需要嵌套理解。
@Dennis .... duuh ;) 谢谢
【参考方案1】:
我会做这样的事情,假设系统短“h”是两个字节(通常是):
import struct
def nums2bytes(nums):
return struct.pack(f">len(nums)h", *nums)
def bytes2nums(b):
return struct.unpack(f">len(b)//2h", b)
您可能会构建出表示 2 是“h”、4 是“i”等的功能。请注意,大写字母表示无符号整数,小写字母表示有符号。
另一种方法是安装 numpy 并使用 numpy 数组。
【讨论】:
以上是关于将整数列表转换为字节/ASCII字符串并返回?快速地?的主要内容,如果未能解决你的问题,请参考以下文章