Строка Java в шестнадцатеричную строку

#java #binary #hex #long-integer

#java #двоичный #шестнадцатеричный #длинное целое число

Вопрос:

Я пытаюсь создать генетический алгоритм, и у меня есть этот код:

 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 символов (0s и 1s), мне нужно, чтобы эта строка была шестнадцатеричной строкой (без x), этот код делает это, проблема возникает, когда Long.parseLong() анализирует строку и возвращает шестнадцатеричное число с начальными нулями (которое мне нужно) и выдает мне эту ошибку:

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

Комментарии:

1. Задавая вопрос о коде, всегда полезно указать тег для языка, который вы используете. Вы можете заменить практически любую из тех, которые вы использовали, поскольку ни одна из них не вносит ясности в ваш вопрос.

2. Да, извините, забыл

Ответ №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 в ваши кавычки
общедоступная строка кода метода getRepresentacionBinaria() … в
строка возвращает this.representacionBinaria ; если representacionBinaria представляет метод или функцию, измените его на …this.representacionBinaria();
Надеюсь, вышесказанное поможет.

Комментарии:

1. Извините, вы можете адаптировать это к моему коду? Я довольно новичок в программировании, и это сложно для меня.

2. Это сработало! Большое вам спасибо!! Но вторая часть добавления () для возврата this.representacionBinaria этого не сделала, она предлагает мне создать ‘representacionBinaria’ в качестве метода. Но в любом случае, теперь это работает как по волшебству! Спасибо!