例如我的密码是888888,把密码转换成字符型,再一个个的取出转换成ASC码,累加起来后形成了不可见字符串,问题就出现了!1、形成的字符串无法存入数据库;
2、要转换回来时必须用PCHAR,但一用PCHAR时字符串就全变空字符了!
源码如:
 var
    STR1,STR2:integer;
    RE:String;
    RE1,RE2:CHAR;
begin
.....
  for i:=1 to 6 do
  begin
    val(copy(trim('888888'),i,1),STR1,STR2);
    RE:=RE+chr(STR1);         //RE生成了全是不可见字符,无法存入数据库
  end;
//转换回来
    RE:='';
    for i:=1 to 6 do
  begin
    RE1:=PCHAR(copy(trim(RE),i,1));  //生成的全是空字符
    RE2:=RE1^;
    RE:=RE+inttostr(ord(trim(RE2)));
  end;
   val(RE,STR1,STR2);
//STR1和STR2全是0
请高手帮忙下,谢谢了!为了和以前的软件兼容才需要转换成不可见字符的,以前的软件是VFP写的,它可以做到的,如果现在要是更改密码存入方式的话,就不能和以前软件相互读取了。

解决方案 »

  1.   

    你这代码问题太多了,看不懂RE:=''; 这里已经被置为空字符串,RE1:=PCHAR(copy(trim(RE),i,1));  ,这里肯定得不到值呀再有RE1:=PCHAR(copy(trim(RE),i,1));  ,Re1是char,现在怎么能转成Pchar呢
    RE2:=RE1^; 这也不对呀看不懂了
      

  2.   

    对不起,RE:=''没有,RE1定义为PCHAR,而RE是STRING,所有要用PCHAR转
      

  3.   

    不好意思!刚才定义写错了!
    源码如: 
    var 
        STR1,STR2:integer; 
        RE:String; 
        RE1:PCHAR;
        RE2:CHAR; 
    begin 
    ..... 
      for i:=1 to 6 do 
      begin 
        val(copy(trim('888888'),i,1),STR1,STR2); 
        RE:=RE+chr(STR1);        //RE生成了全是不可见字符,无法存入数据库 
      end; 
    //转换回来 
      for i:=1 to 6 do 
      begin 
        RE1:=PCHAR(copy(trim(RE),i,1));  //生成的全是空字符 
        RE2:=RE1^; 
        RE:=RE+inttostr(ord(trim(RE2))); 
      end; 
      val(RE,STR1,STR2); 
    //STR1和STR2全是0 
      

  4.   

       RE1:=PCHAR(copy(trim(RE),i,1));  //生成的全是空字符 
        RE2:=RE1^; 
    没有必要这么取值RE2 := RE[i]不就是取其中一个字节吗
      

  5.   

    而且ord(trim(RE2)),这也不对呀,参数类型不对,Ord(RE2)
      

  6.   

    谢谢!BDMH这段是生成的一个函数
    var 
        STR1,STR2:integer; 
        RE,SS:String; 
        RE1:PCHAR; 
        RE2:CHAR; 
    begin
      for i:=1 to 6 do 
      begin 
        val(copy(trim('888888'),i,1),STR1,STR2); 
        RE:=RE+chr(STR1);        //RE生成了全是不可见字符,无法存入数据库 
      end; 
      
    这是转换回来的另一个函数
    //转换回来
      SS:=''; 
      for i:=1 to 6 do 
      begin 
        RE1:=PCHAR(copy(trim(RE),i,1));  //生成的全是空字符 
        RE2:=RE1^;                       //按BDMH改成RE2:=RE[I]; 生成出来的也是空字符    SS:=SS+inttostr(ord(trim(RE2))); 
    //主要是这段要把它再转回数字,要如何处理
      end; 
      val(RE,STR1,STR2); 
    //STR1和STR2全是0 我是把两个函数做在一起测试的
      

  7.   

    谢谢bdmh的指教:
    把SS:=SS+inttostr(ord(trim(RE2))); 内的trim()去掉就可以生成了,
    现在又出现新的问题了,如果遇到0的数字后,0数据后面的数全为空了,如830892,转换后变成83,其它全没有了
      

  8.   

    char类型只是ASC码的子集,你用char和string类型去存储ASC码,不出问题才怪!应该用Byte类型
      

  9.   

    用Byte类型存储的话,存起来的就和以前的不一样了