ฉันกำลังพยายามแปลงสตริงที่มีความยาว 8 อักขระของรหัสฐานสิบหกเป็นจำนวนเต็มเพื่อที่ฉันจะได้ทำการเปรียบเทียบ int แทนการเปรียบเทียบสตริงกับค่าที่แตกต่างกันจำนวนมาก
ฉันรู้ว่านี่เป็นเรื่องเล็กน้อยใน C ++ แต่ฉันต้องทำใน Java กรณีทดสอบที่ฉันต้องการเพื่อตอบสนองโดยพื้นฐานแล้วคือการแปลง "AA0F245C" เป็น int แล้วกลับไปที่สตริงนั้นเพื่อที่ฉันจะได้รู้ว่ากำลังแปลงถูกต้อง
ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:
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
ฉันได้ลองทำทีละสองอักขระแล้วคูณผลลัพธ์ซึ่งการแปลงใช้งานได้ แต่ตัวเลขไม่ถูกต้อง
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.
ฉันไม่สามารถใช้ไลบรารีของบุคคลที่สามได้เพื่อให้คุณทราบดังนั้นสิ่งนี้ต้องทำในไลบรารีมาตรฐาน Java
ขอบคุณสำหรับความช่วยเหลือล่วงหน้า
0xAA0F245C = 2853119068
แต่Integer.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
วิธีการที่ตอบสนองวัตถุประสงค์ของคุณ หากค่ามากกว่าInteger.MAX_VALUE
จะแมปกับจำนวนลบ