Arrays 关联阵列,对称算法,CTFE
我想实现类似密码的东西,我选择使用D的关联数组。 我使用Arrays 关联阵列,对称算法,CTFE,arrays,d,Arrays,D,我想实现类似密码的东西,我选择使用D的关联数组。 我使用 struct Codes { int[char] enc; char[int] dec; } 然后我用 foreach(immutable char c; letters ~ whitespace ~ digits) { codes.enc[c] = codes.enc.length; codes.dec[codes.enc.length] = c; } 它的工作原理与我的[en/de]加密函数的工作原
struct Codes
{
int[char] enc;
char[int] dec;
}
然后我用
foreach(immutable char c; letters ~ whitespace ~ digits)
{
codes.enc[c] = codes.enc.length;
codes.dec[codes.enc.length] = c;
}
它的工作原理与我的[en/de]加密函数的工作原理相同,但我有两个问题:
(我现在正在使用dmd v2.053编译器,如果这有什么关系的话)。dec可以是一个普通数组(它等于
字母~空格~数字
顺便说一句)
在enc中,如果只允许ASCII作为字符(长度为255,并将c转换为int作为索引),则也可以使用普通数组
编辑
您可以从letters~whitespace~ digits
字符串创建一个mixin字符串,如下所示
string createSwitch(string seq,string inp){
string out = "switch("~inp~"){";
int i=0;
foreach(ch;seq){
out~="case "~ch~":return "~i";";
}
out~="default: return -1;";
return out;
}
然后您可以将其用作
int intFromChar(char ch){
mixin(createSwitch(letters ~ whitespace ~ digits,"ch"));
}
关于十二月你是对的-那太愚蠢了。我不想使用cast(int)ascii(忘记了menion)。您还可以创建一个额外的函数,将字符映射到int(0-25是a-z,26-52是a-z,53是空格,54-63是0-9),并将其用作索引