暂时将字符串中的字母索引到不同的二进制文件

Temporarily index letters in a string to a different binary

出于自学目的:

所以 ASCII 把每个字符都用二进制表示对吧? A = 65 = 01000001,等等。不过我很好奇,如果您想暂时将变量切换为不同的变量以保存 space,是否有一种简单的方法可以做到这一点?就像我有一个只需要 4 个字母的项目,我可以存储 AR 为 01,RA 为 11,SQ 为 00,QS 为 10 吗?这样,如果我需要回读数据,速度会快得多。我做了一点纸上数学,它会快 20 倍。

目前我主要使用 python,但我也有使用 C++ 的经验。如果有人有想法,我将不胜感激使用那些具有内置函数的语言(如果它们存在)的答案。但就像我说的,我主要只是好奇。如果它需要在接近硬件级别的情况下完成,那就太好了。

谢谢大家!!!

首先,它只会使您的代码在理论上为这些变量减少 20 倍 space,而不会使其更快或减小整个代码的大小。在实践中,差异可以忽略不计,它会破坏与标准 (ASCII) 的兼容性,并且在不使用 ctypes.

的情况下,没有直接的方法在 Python 中实现这一点

在纯 python 中,如果您尝试制作字典以将 "AR" 转换为二进制数 10(或十进制的 2),它将被存储作为 int,它使用 32 bits4 bytes.

此外,内存不能存储在少于一个字节中,您可以使用 ctypes.c_uint8bitarray.

将多个变量存储在一个字节中

来自 C 中的 Whosebug 问题

When is it worthwhile to use bit fields?

Whilst bit-fields can lead to neat syntax, they're pretty platform-dependent, and therefore non-portable. A more portable, but yet more verbose, approach is to use direct bitwise manipulation, using shifts and bit-masks.

If you use bit-fields for anything other than assembling (or disassembling) structures at some physical interface, performance may suffer. This is because every time you read or write from a bit-field, the compiler will have to generate code to do the masking and shifting, which will burn cycles.

python 的不同会使情况变得更糟。