Tôi đang cố gắng chuyển đổi một chuỗi dài 8 ký tự mã thành một số nguyên để tôi có thể so sánh chuỗi thay vì so sánh chuỗi trên nhiều giá trị khác nhau.Chuyển đổi chuỗi thập lục phân thành int
Tôi biết điều này là khá tầm thường trong C++ nhưng tôi cần phải làm điều đó trong Java. Các trường hợp thử nghiệm tôi cần phải đáp ứng về cơ bản là để chuyển đổi "AA0F245C" để int và sau đó trở lại chuỗi đó để tôi biết nó đang chuyển đổi đúng.
Tôi đã thử những điều sau đây:
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 đã cố gắng làm việc đó hai nhân vật tại một thời điểm và nhân kết quả, mà các tác phẩm chuyển đổi nhưng số lượng là 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 để bạn biết, vì vậy việc này phải được thực hiện trong thư viện chuẩn Java.
Cảm ơn sự giúp đỡ của bạn trước.
Bạn đang nhân khi bạn cần phải thay đổi. –
'0xAA0F245C = 2853119068' nhưng' Integer.MAX_VALUE = 0x7fffffff = 2147483647' – Pshemo
Tôi biết câu hỏi đã xảy ra trong hai năm. Tuy nhiên, java 8 cho phép một giải pháp khác. Họ đã thêm phương thức 'Integer.parseUnsignedInt (" value ", radix)' phục vụ cho 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. – John