【问题标题】:Java String to hex stringJava字符串到十六进制字符串
【发布时间】:2017-03-04 08:08:30
【问题描述】:

我正在尝试创建一个遗传算法,我得到了这个代码:

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() 解析字符串并返回一个十六进制数字前导零(我需要)并给我这个错误:

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

【问题讨论】:

  • 在询问有关代码的问题时,为您使用的语言添加标签总是很有帮助的。您几乎可以替换您使用的任何一个,因为它们都不能明确您的问题。
  • 是的,抱歉,忘记了

标签: java binary hex long-integer


【解决方案1】:

您可以尝试以下将长(多字符)字符串转换为十六进制字符串的函数(传递给函数的字符串 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;
}

要使此方法适应您引用的代码,您需要将此方法添加到您的类中(只需将其作为公共方法添加到您引用的其余公共方法中),您可能还需要更改最后一个方法引用到:

public String getRepresentacionHexadecimal() {

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

}

我还可以提到,您可能必须在引用的内容中添加一个 parethensis 方法的代码 public String getRepresentacionBinaria()... 在 行返回 this.representacionBinaria ;如果representacionBinaria 表示一个方法或函数,将其更改为...this.representacionBinaria(); 希望以上内容对您有所帮助。

【讨论】:

  • 对不起,你能适应我的代码吗?我对编程很陌生,这对我来说很难。
  • 成功了!太感谢了!!但是添加 () 以返回 this.representacionBinaria 的第二部分没有,它提示我创建 'representacionBinaria' 作为方法。但无论如何,现在它就像一个魅力!谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 2014-03-07
  • 2012-04-27
  • 2011-08-19
  • 2013-02-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
相关资源
最近更新 更多