将整数列表转换为字节/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字符串并返回?快速地?的主要内容,如果未能解决你的问题,请参考以下文章

ASCII与字符的转换

将 ASCII 中的字节内容转换为字符串

文件控制字符编码

将 List<boolean> 转换为字符串

将整数拆分并存储为两个字节

理解记忆三种常见字符编码:ASCII, Unicode,UTF-8