将字符串中的字母临时索引到不同的二进制文件
Posted
技术标签:
【中文标题】将字符串中的字母临时索引到不同的二进制文件【英文标题】:Temporarily index letters in a string to a different binary 【发布时间】:2021-12-04 16:12:58 【问题描述】:出于自学目的:
所以 ASCII 把每个字符都用二进制表示对吗? A = 65 = 01000001 等。不过我很好奇,如果您想暂时将变量切换为不同的变量以节省空间,有没有一种简单的方法可以做到这一点?就像我有一个只需要 4 个字母的项目,我可以存储 AR 为 01、RA 为 11、SQ 为 00、QS 为 10 吗?这样,如果我需要回读数据,它会快得多。我做了一点纸上数学,它会快 20 倍。
目前我主要使用 python,但我也有 C++ 经验。如果有人有想法,我会很感激使用那些具有内置函数的语言(如果存在)的答案。但就像我说的,我主要只是好奇。如果需要在接近硬件级别的情况下完成,那就太好了。
谢谢大家!!!
【问题讨论】:
你已经有了一个很好的答案。我只想补充一点,Python 字符串不是 ASCII,它们是 Unicode,它是 ASCII 的一个巨大超集,因此字符在物理上可以占用超过一个字节。最好不要将 Python 字符串视为字节数组(Python 对此有bytes
)。
当然,您可以定义任何您喜欢的表示。如果您需要显示任何内容,只需将其映射到字符串即可。
【参考方案1】:
首先,理论上它只会使您的代码在理论上为这些变量占用 20 倍的空间,而不是使其更快或减少整个代码的大小。实际上,这种差异可以忽略不计,它会破坏与标准 (ASCII) 的兼容性,并且没有直接的方法可以在不使用 ctypes
的情况下在 Python 中实现这一点。
在纯 Python 中,如果您尝试制作一个字典以将 "AR"
转换为二进制数 10
(或十进制的 2
),它将存储为 int,它使用 32 bits
或 @987654328 @。
此外,内存不能存储在少于一个字节中,您可以使用 ctypes.c_uint8
或 bitarray
在单个字节中存储多个变量。
来自 C 中的 *** 问题
When is it worthwhile to use bit fields?
虽然位域可以带来简洁的语法,但它们非常漂亮 平台相关,因此不可移植。更便携,但 更冗长的方法是使用直接按位操作, 使用移位和位掩码。
如果您将位域用于汇编以外的任何事情(或 拆卸)结构在一些物理接口,性能可能 遭受。这是因为每次从位域读取或写入时, 编译器必须生成代码来进行屏蔽和 转移,这将燃烧循环。
python 的不同会让情况更糟。
【讨论】:
以上是关于将字符串中的字母临时索引到不同的二进制文件的主要内容,如果未能解决你的问题,请参考以下文章