微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将整数列表转换为字节/ascii 字符串并返回?快速地?

如何解决将整数列表转换为字节/ascii 字符串并返回?快速地?

我正在尝试将数字列表转换为字符串并反转......这就是我得到的

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 的透明度如何......我是否坚持使用最大的一个,或者我是否决定在整个应用程序中坚持使用特定的一个/在这种情况下我必须放一个断言!!

解决方法

我会做这样的事情,假设系统短“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 数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。