Tôi đang cố gắng chuyển đổi một chuỗi dài 8 ký tự của mã hex thành một số nguyên để tôi có thể thực hiện so sánh int thay vì so sánh chuỗi trên nhiều giá trị khác nhau.
Tôi biết điều này là khá nhỏ trong C ++ nhưng tôi cần phải làm điều đó trong Java. Trường hợp thử nghiệm tôi cần đáp ứng về cơ bản là Chuyển đổi "AA0F245C" thành int và sau đó quay lại chuỗi đó để tôi biết nó đang chuyển đổi đúng.
Tôi đã thử những cách sau:
int decode = Integer.decode("0xAA0F245C"); // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException
Tôi cũng đã thử thực hiện hai ký tự cùng một lúc và nhân kết quả, chuyển đổi hoạt động nhưng con số không đúng.
int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
String sub = hex.subSequence(h, h+2).toString();
if (id == 0)
id = Integer.valueOf(sub, 16);
else
id *= Integer.valueOf(sub, 16);
}
//ID = 8445600 which = 80DEA0 if I convert it back.
Tôi không thể sử dụng thư viện của bên thứ ba, vì vậy điều này phải được thực hiện trong các thư viện chuẩn Java.
Trước tiên xin cảm ơn sự giúp đỡ của bạn.
0xAA0F245C = 2853119068
nhưngInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
phương pháp phục vụ mục đích của bạn. Nếu giá trị lớn hơn Integer.MAX_VALUE
nó được ánh xạ tới một số âm.