做了一个语言的翻译,从delphi翻译到Java,发现delphi里有Char()方法,就是类似转化为字符这样的功能,
java里我用(char)强转,转化成的字符有的是乱码,小方块,delphi里不会出现,请问有类似专家解决此类问题吗?

解决方案 »

  1.   


    //你说的是:?
    String.indexOf();
      

  2.   

    这可能就是导致乱码的原因
    楼主可以试试下面这种方法:package csdn;public class Test {
    public static void main(String[] args) {
    int num = 123;
    String str = "Hello Java";
    char[] c = str.toCharArray(); // 字符串转到字符

    String s = num+""; // int -> String
    char[] cc = s.toCharArray(); // String - > char 即 int - > char 可采用这种间接转换 通过String作为桥梁来实现
    }
    }
      

  3.   

    delphi里面的char()的用法是
    char(58)值为“冒号”即“:”
    char(40)值为“左括号”即“(”
    char(5)值为“竖”即“|”这个方法就是把asc码转换为字符,和asc码表对照过了,除了char(5)没有值,其他都是正确的。
    上面是delphi中的情况,下面讲在java里面的情况:
    (char)58值为“冒号”即“:”
    (char)40值为“左括号”即“(”
    (char)5值为乱码“□”谢谢了,我先试试楼上的方法。
      

  4.   


    你好,能不能帮我弄成一个方法?传进int,转为char,谢谢,我自己也在弄。
      

  5.   

    System.out.println((char)65);//输出A
      

  6.   

     public static char IntegerToChar(int i){
    return (char)i;//超过65536或小于-65536将会失真,比如(65535+97)这个整数将会返回'a'
        }
      

  7.   

    java.lang.Character.toChars(40)[0] : (Character.isISOControl(5) : true 控制 不可打印
      

  8.   


    你好,我传5进去,出来还是“□”,而delphi里是“|”,是不是要编码什么的?谢谢!
      

  9.   

    // require  c < 65535 && c >= 0
    static char i2c(int c){
        return Character.toChars(c)[0];
    }
      

  10.   

    ISOControl
    控制字符,是不能打印出來的
      

  11.   

     public static char IntegerToChar(int i){
        return (char)i;//大于等于65536或小于0将会失真,比如(65535+97)这个整数将会返回'a'
    //ascii码是0到127,其中0到32和127,是看不见的
     }
      

  12.   

    128个ascii码是中,33个字符是无法看见 就是0到31和127
    虽然是7个2进制位就能表示它们,但注意java中的char二进制位有16个
      

  13.   

    谁能帮翻译下这个delphi的解密程序成JAVA,请吃饭,另附上我自己翻译的,有错误的JAVA源码。
    下面是delphi程序:
    unit SkCrypt;
    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, ComCtrls, ToolWin,
      Buttons,  db, HTTPApp, DBClient, MConnect, SConnect, Psock, NMFtp,
      NMUDP,Clipbrd, FileCtrl,PMDbAgt,ReadSysConfig, dxmdaset,PMCrypt;function SkEncrypt(s:string):string;
    function SkDecrypt(s:string):string;implementation
    const
      StartKey = 833;   {Start default key}
      MultKey   = 38742; {Mult default key}
      AddKey   = 25861; {Add default key}
    {$R-}
    {$Q-}
    {*******************************************************
     * Standard Encryption algorithm - Copied from Borland *
     *******************************************************}
    function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
    var
      I : Byte;
    begin
      Result := '';
      for I := 1 to Length(InString) do
      begin
        Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
        StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
      end;
    end;
    {*******************************************************
     * Standard Decryption algorithm - Copied from Borland *
     *******************************************************}
    function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;
    var
      I : Byte;
    begin
      Result := '';
      for I := 1 to Length(InString) do
    showmessage(inttostr(i));
      begin
        Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8)); //shr 位移运算,将数值转换为二进制,往右位移8次,剩下的二进制数字转换为十进制,得出值;
        showmessage(Result);
        StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey;
      end;
    end;
    {$R+}
    {$Q+}{Coded by cloudy}function cl_bytetocharstr(s:string):string;
    var
       i:integer;
    begin
         i:=1;
         result:='';
         if (length(s) mod 3)=0 then
            while i<length(s) do
            begin
                result:=result+char(strtoint(copy(s,i,3)));
                i:=i+3;
            end;
    end;{Coded by cloudy}
    function SkEncrypt(s:string):string;
    var
       years, months, days, hours, mins, secs, msec:word;
       cl_StartKey, cl_MultKey, cl_AddKey: longint;begin
         if Trim(s)='' then begin Result := ''; exit; end;
         decodedate(now, years, months, days);
         decodetime(now, hours, mins, secs, msec);
         cl_StartKey:=msec;
         if cl_StartKey<256 then cl_StartKey:=cl_StartKey+256;
         cl_Multkey:=((years-1900)*12+months)*30+days+cl_StartKey*10+cl_StartKey;
         cl_AddKey:=(23*hours+mins)*60+secs+cl_StartKey*10+cl_StartKey;
         result:=cl_chartobytestr(Encrypt(cl_intto0str(cl_StartKey,3),StartKey,MultKey,AddKey))+cl_chartobytestr(Encrypt(cl_intto0str(cl_Multkey,5),StartKey,MultKey,AddKey))+cl_chartobytestr(Encrypt(cl_intto0str(cl_Addkey,5),StartKey,MultKey,AddKey))+cl_chartobytestr(Encrypt(s,cl_StartKey,cl_MultKey,cl_AddKey));
    end;{Coded by cloudy}
    function SkDecrypt(s:string):string;
    var
       cl_StartKey, cl_Multkey, cl_AddKey:longint;
    begin
       if Trim(s)='' then begin Result := ''; exit; end;
       cl_StartKey:=strtoint(decrypt(cl_bytetocharstr(copy(s, 1, 9)),StartKey,MultKey,AddKey));
       cl_MultKey:=strtoint(decrypt(cl_bytetocharstr(copy(s, 10, 15)),StartKey,MultKey,AddKey));
       cl_AddKey:=strtoint(decrypt(cl_bytetocharstr(copy(s, 25, 15)),StartKey,MultKey,AddKey));
       result:=decrypt(cl_bytetocharstr(copy(s, 40, length(s)-39)),cl_StartKey,cl_MultKey,cl_AddKey);
    end;
    end.下面是我仿做的JAVA程序,供参考和帮我找下错误,因为方法是错的:import java.io.UnsupportedEncodingException;
    import java.util.Scanner;
    public class Jiemi {
        private long StartKey = 833;
        private long MultKey = 38742;
        private long AddKey = 25861;
    public String codein;
    public String codeout; public String getPassword(String str) {
    int intStartKey;
    int intMultKey;
    int intAddKey;
    intStartKey= (backback(resultBack(codeBack(str,0,9)),StartKey,MultKey,AddKey));
    //System.out.println(backback(resultBack(codeBack(str,0,9)),StartKey,MultKey,AddKey));
    intMultKey= (backback(resultBack(codeBack(str,9,24)),StartKey,MultKey,AddKey));
    //System.out.println(backback(resultBack(codeBack(str,10,24)),StartKey,MultKey,AddKey));
    intAddKey= (backback(resultBack(codeBack(str,24,39)),StartKey,MultKey,AddKey));
    //System.out.print(backback(resultBack(codeBack(str,25,39)),StartKey,MultKey,AddKey));
    String password = "";//backback(resultBack(codeBack(str,40,40+(str.length()-39))),intStartKey,intMultKey,intAddKey);
    return password;
    }

    public String codeBack(String str,int i,int k) {
    //System.out.println("---"+str.substring(i, k));
    return str.substring(i, k);
    }
    public String resultBack(String str) {
    String s="";
    int i=0;
    if(str.length()%3==0){
    while(i<str.length()){
    s = s + integertochar(Integer.parseInt(codeBack(str,i,i+3)));
    i=i+3;
    }
    }
    return s;
    } public int backback(String str,long intStartKey,long intMultKey,long intAddKey) {
    int b=0;
    int a=0;
    for(int m=0;m<str.length();m++){
    b=(byte)str.charAt(m);
    int t=(int)(intStartKey>>8);
    a=a+(char)(b^t);
    intStartKey= ((byte)str.charAt(m)+intStartKey)*intMultKey+intAddKey;
    System.out.println("a="+a);
    }
    return a;
    }
    static char integertochar(int k) {
    //return Character.toChars(k)[0];
    return (char)k;
    }
    }
      

  14.   


    丑陋的depli
    不是c风格的 我怎么都觉得丑陋呢
    特别是vb
      

  15.   

    解密方法:SkDecrypt其他的用到就是有用的,没用到就不看了!谢谢!
      

  16.   

    b=(byte)str.charAt(m);強轉成byte會丟失信息的
    int t=(int)(intStartKey>>8);右移8位不需要強轉
    a=a+(char)(b^t);
      

  17.   

    char和int是可以直接強轉的除了負數
      

  18.   


    String str = "abcABC";
    char i = str.charAt(0);//得到a这个字符
    char[] arr = str.toCharArray(); 楼主说的是它们吗?
      

  19.   


    这个方法能实现什么?我是想传int进去,返回用char转换过的字符,一定是我java里哪里写错了,或者数据类型没弄好,计算出“???”