字符转换问题,高手请进,急救!!!!!!!!!!!
function EncryptStr(SourceStr: string): string;
var
StrLen: Integer;
TempStr: string;
TempStr1: string;
i: Integer;
Byte1: Byte;
begin
TempStr := '';
TempStr1 := '01';
StrLen := Length(SourceStr);
for i := 1 to StrLen do
begin
Byte1 := Ord(SourceStr[i]) + 120;
TempStr1[1] := Chr(Byte1);
TempStr1[2] := Chr(Byte1 + 7);
TempStr := TempStr + TempStr1;
end;
EncryptStr := TempStr;
end;
如何做一个与之完全等效的java方法,由于java用的是unicode,急救!!!!!!!!!! ,给源码!!!!!!!!!!
问题点数:150、回复次数:16Top
1 楼lanren(Everything over IP)回复于 2001-11-02 21:07:51 得分 0
高人救命Top
2 楼lanren(Everything over IP)回复于 2001-11-02 21:11:25 得分 0
高人救命
Top
3 楼lanren(Everything over IP)回复于 2001-11-02 21:14:17 得分 0
完全一样的输入,完全一样的输入出Top
4 楼titansavent(titan)回复于 2001-11-03 04:19:25 得分 0
不懂,你想问什么?是想把int 付给 string 么,
若是如此, 可以用, String a = String.valueOF(i) + "" 试一下,应给没问题Top
5 楼lanren(Everything over IP)回复于 2001-11-03 12:53:58 得分 0
是这样的,我有一个以前用dephi开发的应用系统,有一个密码验证过程,其中的密码是用上述的dephi函数加密保存在数据库中的,现在要在一个servlet中对实现这个验证过程,用的还是以前的数据,我从页面得到用户输入的密码明文,想用一个java方法(在javaBean中)加密后与从数据库中取得的密码(经dephi函数加密的)进行比较实现验证过程,现在的问题是如何用一个相同的密码明文,经java方法运算得到与原数据库中取得的密文完全相同,主要是汉字编码问题,
例如,明文'hljdkh'用上述dephi函数运算得到的密文是'噻潆忾茔汴噻'
现在的问题是要用java实现一个方法,输入'hljdkh',得到输出'噻潆忾茔汴噻'
'Top
6 楼lanren(Everything over IP)回复于 2001-11-03 12:54:47 得分 0
帮忙Top
7 楼ChDw(米)回复于 2001-11-03 13:14:10 得分 150
public static String encode(String src)
{
byte[] ch = src.getBytes();
byte[] result = new byte[ch.length * 2];
for(int i = 0; i < ch.length; i++) {
result[i*2] = (byte)(ch[i]+120);
result[i*2 + 1] = (byte)(ch[i]+127);
}
return new String(result);
}
Top
8 楼lanren(Everything over IP)回复于 2001-11-03 14:04:10 得分 0
楼上的高人,多谢了,请帮我看一个这段代码为什么不对,马上给分
public String encrypt(String source)
{
byte bt ;
StringBuffer temp=new StringBuffer();
int a1,a2;//asci码值
int strLen=source.length();
//source=new String(source.getBytes("ISO8859-1"));
for(int i=0;i<strLen;i++)
{
a1=(int)source.charAt(i)+120;
a2=a1+7;
a1=(a1<<8)|a2;
temp.append((char)a1);
}
return temp.toString();Top
9 楼ChDw(米)回复于 2001-11-03 14:21:08 得分 0
因为在java里面,中文字符的存储使用的是Unicode,所以你算出来的a1并不是一个GB2312下
的字符,Top
10 楼lanren(Everything over IP)回复于 2001-11-03 14:35:49 得分 0
可是从数据库中取得的字符不也是用unicode表示的吗;在dephi中的密文'噻潆忾茔汴噻'与java中从数据库取得的密文的内码表示为什么会相同,在dephi中汉字的内码是GB2312,在java是的内码是unicode,它们为什么会相同?????
还有a1的十六进制值是不是在(char)a1的时候发生了变化?????????
Top
11 楼ChDw(米)回复于 2001-11-03 14:41:06 得分 0
第一个循环内a1=0xe0e7,在delphi中由于使用GB2312编码所以a1代表了“噻”字符
但是在java里面,0xe0e7由于使用Unicode,所以根本不是“噻”字符
Top
12 楼lanren(Everything over IP)回复于 2001-11-03 14:46:28 得分 0
那你的代码为什么会得到“噻”字符??????????Top
13 楼lanren(Everything over IP)回复于 2001-11-03 14:49:37 得分 0
它的算法与我的应该是一样的,ch[0]ch[1]放在一起与a2<<8|a2不是一样的结果吗,难道在
new String()内码发生了变化,小弟愚味!!!!
Top
14 楼ChDw(米)回复于 2001-11-03 14:52:56 得分 0
ch[0]ch[1]放在一起之后得到的字符并不是a2<<8¦a2,
java会通过一个算法把ch[0],ch[1]算出Unicode直=0x567BTop
15 楼lanren(Everything over IP)回复于 2001-11-03 14:55:06 得分 0
是不是new String的时候进行这种转换的?Top
16 楼lanren(Everything over IP)回复于 2001-11-03 14:59:06 得分 0
to ChDw(米)
我的QQ是:1344293
留下你的QQ,交个朋友好吗???以后多请教Top




