如何使用 gawk 5 以确定性方式将字符串转换为等效的 int?

How to transform a string into an int equivalent in a deterministic way with gawk 5?

我面临这样一种情况,我需要将字符串转换为与 gawk5 等效的 int。

此转换必须是确定性的。

我的第一个天真的方法是将字符串的每个字母转换到其在拉丁字母表中的等效位置,然后将结果连接回字符串。

例如:

my_string = "AB"
A = 1
B = 2
my_int=12

但是,这有几个缺点:

所以,基本上,这是不行的。

gawk5 从字符串生成整数的好方法是什么?

PS:有些人会评论说 gawk 可能不是那个工具,他们可能是对的,我知道这一点。但这是一个个人项目,如果可能的话应该只包含 awk ;)

如果您的字符串仅包含 ASCII 字符,没有换行符,并且如果您使用 GNU awk,则以下内容简单地将每个字符转换为其 3 位 ASCII 代码:

$ echo "abc" | awk -vFS= '
    BEGIN {for(i=0;i<128;i++) c[sprintf("%c",i)]=i}
    {for(i=1;i<=NF;i++) printf("%03d",c[$i])}'
097098099

当然这会将字符串扩展了 3 倍,这可能不是最优的。如果您知道您的字符串仅包含 32-127 范围内的 ASCII 字符,则可以将此系数减小为 2:

$ echo "abc" | awk -vFS= '
    BEGIN {for(i=32;i<128;i++) c[sprintf("%c",i)]=i-32}
    {for(i=1;i<=NF;i++) printf("%02d",c[$i])}'
656667