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();
希望以上内容对您有所帮助。
我正在尝试创建一个遗传算法并且我有这个代码:
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(); 希望以上内容对您有所帮助。