例如我的密码是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写的,它可以做到的,如果现在要是更改密码存入方式的话,就不能和以前软件相互读取了。
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写的,它可以做到的,如果现在要是更改密码存入方式的话,就不能和以前软件相互读取了。
RE2:=RE1^; 这也不对呀看不懂了
源码如:
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
RE2:=RE1^;
没有必要这么取值RE2 := RE[i]不就是取其中一个字节吗
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 我是把两个函数做在一起测试的
把SS:=SS+inttostr(ord(trim(RE2))); 内的trim()去掉就可以生成了,
现在又出现新的问题了,如果遇到0的数字后,0数据后面的数全为空了,如830892,转换后变成83,其它全没有了