Java 字符串转十六进制字符串

Java String to hex string

我正在尝试创建一个遗传算法并且我有这个代码:

public Cromosoma() {
    this.setRepresentacionBinaria(this.generarAleatoriamenteCromosoma());
}

private String generarAleatoriamenteCromosoma() {
    String cromosoma = "";
    for (int i = 1; i <= 40; i++) {
        cromosoma += ((int) (Math.random() * 10)) % 2;
    }
    return cromosoma;
}

public String getRepresentacionBinaria() {
    return this.representacionBinaria;
}

public String getRepresentacionHexadecimal() {

    return Long.toHexString(Long.parseLong(this.getRepresentacionBinaria(), 2));
}

getRepresentacionBinaria() 生成一个 40 个字符(0 和 1)的随机字符串,我需要该字符串是一个十六进制字符串(不带 x),这段代码做到了,问题出现在 Long.parseLong () 解析字符串和 returns 一个十六进制数 前导零(我需要) 并给我这个错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9

您可以尝试以下将长(许多字符)字符串转换为十六进制字符串的函数(传递给函数的字符串 ss 可以采用“...0010..1..”形式,即“0”和“1”个字符。

public String gettohexastring (String ss) 
{
 String toBuild="";
 String toRet="";
 int endi=ss.length();
 int begi=endi;
 for(int ii=0;ii<ss.length()-4;ii+=4)
 {
      endi=ss.length()-ii;
      begi=endi-4;
     String test=ss.substring(begi, endi);
     toBuild +=Long.toHexString(Long.parseLong(test),2);
 }
 endi=begi;
 begi=0;
 toBuild +=Long.toHexString(Long.parseLong(ss.substring(begi,endi),2));
 //To Reverse hex symbols
 for(int ii=toBuild.length();ii>=1;ii--)
 {
     toRet +=toBuild.substring(ii-1, ii);
 }
 return toRet;
}

要使此方法适应您引用的代码,您需要将此方法添加到您的 class(只需将其作为 public 方法添加到其余 public 方法即可你引用的),你可能还必须将你引用的最后一个方法更改为:

public String getRepresentacionHexadecimal() {

return this.gettohexastring(this.getRepresentacionBinaria());

}

我还可以提一下,您可能需要在引用中添加括号 方法的代码 public String getRepresentacionBinaria()... 在 第 return this.representacionBinaria 行;如果 representacionBinaria 表示方法或函数,则将其更改为 ...this.representacionBinaria(); 希望以上内容对您有所帮助。