我试图将用户输入作为字符串,将此字符串分成两半并将这些字符串转换为十六进制整数。我需要在TEA加密算法中使用这些十六进制整数。我正在使用netbeans为gui builder制作这段代码。
我当前的代码
//Getting initial text
String arg = input.getText();
//establishing Left and Right for TEA
int[] v = new int[2];
// Splitting the string into two.
StringBuilder output2;
for (int x = 0; x < 2; x++ ) {
output2 = new StringBuilder();
for (int i = 0; i < arg.length()/2; i++) {
if (x == 1)
output2.append(String.valueOf(arg.charAt(arg.length()/2 + i)));
else
output2.append(String.valueOf(arg.charAt(i)));
}
//converting a half into a string
String test = output2.toString();
//printing the string out for accuracy
System.out.println(test);
//converting the string to string hex
test = toHex(test);
//converting the string hex to int hex.
v[x] = Integer.parseInt(test, 16);
}
public static String toHex(String arg) {
return String.format("%x", new BigInteger(arg.getBytes()));
}
我收到此错误:
java.lang.NumberFormatException:对于输入字符串:“6a54657874”
我已经浏览了网络上的这个问题,但是错误说当我将字符串转换为v [x]时会发生这种情况,多个站点说这是将十六进制字符串放入int的正确方法,所以我很困惑。请帮忙。
答案 0 :(得分:2)
6a54657874
十六进制为十六进制456682469492
。这大于Integer.MAX_VALUE
。它将适合long
。
让v
成为long[]
并使用Long.parseLong(test, 16);
答案 1 :(得分:1)
32位对于您的号码来说太小了。您需要使用Long.parseLong
代替。