1、
S,P : String
value : string[25]
i,Len : integer
value := S;P := '';Len := 24;
//将个字节值 * i后映射到A-Z可显示ASCII区间
for i:=1 to Len do
begin
   if(ord(Value[i]) in [65..90]) then p:=p+value[i]
   else p:=p+char(65 + (Word(Value[i]) * i) mod 26)2、
i,j,len:integer
value:string[25]
p:stringlen:=24
value:=s;p:=''
//将各字节值与0X58异或后左移4位并映射到1-9可现实ASCII码区间
for i:=1 to len do
begin
    j:=1
    p:=p+char(48+(((word(value[i] xor $A7) shl 4) + (j mod 5)) mod 10)
end
那位大神能把上面的代码用文字的方式给我解释解释?尤其是怎么映射到A-Z或者1-9的ASCII码区间那段,最好能把我把这两段代码改成C++的,多谢各位大神啊~~~

解决方案 »

  1.   

    ord去一个字符的asi值
    char转为字符mod 取模
    xor 异或
    看懂这些,应该懂了吧
      

  2.   

    这种晦涩难懂的写法,现在好象只有考试中才会出现了吧。
    如果这么写的话,用不了三天, 我自己都不认识了。for i:=1 to Len do   // 循环从1-24
    begin
      if(ord(Value[i]) in [65..90]) then // 判断这个串中的某一个字节是否在 65-90(A-Z)中
        p:=p+value[i]   // 如果是,把这个字符追加到 变量P中
      else 
        p:=p+char(65 + (Word(Value[i]) * i) mod 26) // 如果不是,则用这个当前这个字符的ASCII值乘上所在位置的顺号,再对26取余数,最后加上65后,变成一个字符追加到变量P中。(这是加密?)
    如果不是加密的话,这么写的人脑子肯定有点问题,是不是和门有为亲密的接触。