มีหลายวิธีในการแปลงระบบไบนารีในชวา ในหมู่พวกเขามีคลาสบรรจุภัณฑ์สำหรับฐานสิบหกฐานเลขฐานสิบหกฐานเลขฐานสิบหกซึ่งไม่จำเป็นต้องนำไปใช้ผ่านอัลกอริทึมสองออก รายละเอียดมีดังนี้:
ก่อนอื่นวิธีการแปลงไบนารีที่ง่ายที่สุดคือ:
แปลงทศนิยมเป็นเลขฐานสิบหก:
String Integer.toHexstring (int i)
แปลงทศนิยมเป็น octal
String Integer.tooctalstring (int i)
แปลงทศนิยมเป็นไบนารี
String Integer.tobinaryString (int i)
แปลงเลขฐานสิบหกเป็นทศนิยม
Integer.valueof ("ffff", 16) .tostring () // ไม่สามารถจัดการคำนำหน้า 0x
เปลี่ยนแปดเป็นทศนิยม
Integer.valueof ("76", 8) .tostring () // คำนำหน้า 0 สามารถประมวลผลได้เป็นไบนารีถึงทศนิยม
Integer.valueof ("0101", 2) .tostring ()
มีวิธีใดบ้างที่จะแปลงโดยตรง 2, 8, hexadecimal เป็นทศนิยมโดยตรง?
Java.lang.integer คลาส
parseint (สตริง s, int radix)
ใช้ cardinality ที่ระบุโดยพารามิเตอร์ที่สองเพื่อแยกวิเคราะห์พารามิเตอร์สตริงเป็นจำนวนเต็มที่ลงนาม
ตัวอย่างจาก JDK:
Parseint ("0", 10) ส่งคืน 0
Parseint ("473", 10) ส่งคืน 473
Parseint ("-0", 10) ส่งคืน 0
Parseint (" -ff", 16) ส่งคืน -255
Parseint ("1100110", 2) ส่งคืน 102
Parseint ("2147483647", 10) ส่งคืน 2147483647
Parseint (" -2147483648", 10) ส่งคืน -2147483648
Parseint ("2147483648", 10) throwsa numberformatexception
Parseint ("99", throwsa numberformatexception
Parseint ("Kona", 10) พ่น NumberFormatexception
Parseint ("Kona", 27) ส่งคืน 411787
วิธีการเขียนการแปลงแบบไบนารี (สอง, แปด, สิบหก) โดยไม่มีอัลกอริทึม
Integer.tobinaryString
Integer.tooctalstring
Integer.tohexstring
จากนั้นแนะนำการแปลงของหมายเลขไบต์และเลขฐานสิบหกใน java
การวิเคราะห์หลักการ:
ไบต์ในชวาประกอบด้วย 8 บิตและเลขฐานสิบหกคือสถานะใน 16 ซึ่งแสดงด้วย 4 บิตเพราะ 24 = 16 ดังนั้นเราจึงสามารถแปลงไบต์เป็นสองตัวอักษรหกเหลี่ยมนั่นคือแปลงตัวเลข 4 และต่ำ 4 หลักเป็นตัวอักษรหกเหลี่ยมที่สอดคล้องกันและรวมสายหกสิบสองตัวนี้เพื่อให้ได้สตริงเลขฐานสิบหกของไบต์ ในทำนองเดียวกันการแปลงตรงข้ามยังแปลงตัวละครหกเหลี่ยมสองตัวเป็นหนึ่งไบต์
ใน Java มีสองแนวคิดหลักสำหรับการแปลงไบต์และเลขฐานสิบหก:
1. เมื่อไบนารีไบต์ถูกแปลงเป็นเลขฐานสิบหกให้ดำเนินการ "&" ของไบต์สูงและ 0xf0 จากนั้นเลื่อนด้านซ้ายด้วย 4 บิตเพื่อให้ได้ hexadecimal A ของไบต์สูง; ดำเนินการ "&" ของไบต์ต่ำและ 0x0f เพื่อให้ได้ hexadecimal B ของต่ำและตัวเลขและรวบรวมตัวเลขหกสิบหกเป็นสองส่วนเป็นชิ้นส่วนของ AB ซึ่งเป็นตัวแทนของไบต์
2. เมื่อเลขฐานสิบหกไปยังไบนารีไบต์ให้ย้ายหมายเลขทศนิยมที่สอดคล้องกับตัวละครเลขฐานสิบหกไปทางขวา 4 เพื่อให้ไบต์สูง A; ทำ "|" การทำงานของเลขทศนิยม B และ A ของตัวละครเลขฐานสิบหกที่สอดคล้องกับไบต์ต่ำเพื่อรับการเป็นตัวแทนไบนารีเลขฐานสิบหก
หนึ่งในฟังก์ชั่นการแปลงมีดังนี้:
/** * * @param bytes * @return แปลงไบนารีเป็นเอาท์พุทอักขระ hexadecimal */</span> สตริงคงที่ส่วนตัว hexstr = "0123456789abcdef"; // สเตตสเตตสาธารณะทั่วโลก binarytoHexstring (ไบต์ [] ไบต์) {string result = ""; สตริง hex = ""; สำหรับ (int i = 0; i <bytes.length; i ++) {// bytes สูงกว่า 4 บิต <strong> hex = string.valueof (hexstr.charat ((ไบต์ [i] & 0xf0) >> 4)); </strong> // ไบต์ต่ำกว่า 4 บิต <strong> hex += string.valueof (hexstr.charat (ไบต์ [i] & 0x0f)); </strong> ผลลัพธ์ += hex; } ผลตอบแทนผลลัพธ์; }/** * * @param hexstring * @return แปลง hexadecimal เป็นอาร์เรย์ไบต์ */ไบต์สาธารณะคงที่ [] hexstringtobinary (สตริง hexstring) {// ความยาวของ hexstring ถูกปัดเศษ 2 ตามความยาวของ bytes int len = hexstring.length ()/2; ไบต์ [] ไบต์ = ไบต์ใหม่ [len]; ไบต์สูง = 0; // ไบต์สูงสี่บิตไบต์ต่ำ = 0; // ไบต์ต่ำสี่บิตสำหรับ (int i = 0; i <len; i ++) {// ถ่ายโอนไปยังสี่บิตด้านขวา low = (byte) hexstr.indexof (hexstring.charat (2*i+1)); ไบต์ [i] = (ไบต์) (สูง | ต่ำ); // สถานะสูงหรือการดำเนินการ} ส่งคืนไบต์; - นอกจากนี้ยังมีวิธีการที่คล้ายกัน:
<span style = "ตัวอักษรขนาด: 14px;">* แปลงไบต์ [] เป็นสตริง hex ที่นี่เราสามารถแปลงไบต์เป็น int จากนั้นใช้จำนวนเต็ม tohexstring (int) เพื่อแปลงเป็นสตริง hex
* @param src byte [] data * @return hex string */ สตริงคงที่สาธารณะ bytestohexstring (byte [] src) {stringbuilder stringbuilder = new StringBuilder (""); if (src == null || src.length <= 0) {return null; } สำหรับ (int i = 0; i <src.length; i ++) {int v = src [i] & 0xff; สตริง hv = integer.tohexstring (v); if (hv.length () <2) {stringbuilder.append (0); } StringBuilder.Append (HV); } return stringbuilder.toString (); } / ** * แปลงสตริง hex เป็น byte [] * @param hexstring สตริง hex * @return byte [] * / ไบต์สาธารณะคงที่ [] hexstringTobytes (สตริง hexstring) {ถ้า (hexstring == null || hexstring.equals ("") } hexString = hexString.touppercase (); ความยาว int = hexstring.length () / 2; ถ่าน [] hexchars = hexstring.tochararray (); ไบต์ [] d = ไบต์ใหม่ [ความยาว]; สำหรับ (int i = 0; i <length; i ++) {int pos = i * 2; d [i] = (ไบต์) (Chartobyte (hexchars [pos]) << 4 | chartobyte (hexchars [pos + 1])); } return d; } / ** * แปลงถ่านเป็นไบต์ * @param c ถ่าน * @return byte * / ไบต์ไบต์ Chartobyte (Char C) {return (byte) "0123456789abcdef" .indexof (c); } </span>ทั้งสองวิธีคล้ายกันโปรดทราบที่นี่
ข้างต้นเป็นสตริงที่แปลงไบต์ [] เป็น hexadecimal โปรดทราบว่า b [i] & 0xff ทำการคำนวณไบต์และ 0xff จากนั้นใช้จำนวนเต็ม tohexstring เพื่อรับสตริงเลขฐานสิบหก คุณจะเห็นว่า
B [i] & 0xff การทำงานยังคงเป็น int ดังนั้นทำไมคุณต้องดำเนินการ int ด้วย 0xff? Direct Integer.tohexstring (b [i]);, ไม่สามารถบังคับให้ไบต์ให้ถูกแปลงได้หรือไม่? คำตอบคือไม่
เหตุผลคือ:
1. ขนาดของไบต์คือ 8 บิตและขนาดของ int คือ 32 บิต
2. ระบบสองส่วนของ Java ใช้ส่วนประกอบ
ดังนั้นเมื่อตัวเลขติดลบเป็น & ด้วยตัวเลขลบตัวเลขลบจะเติมเต็ม 1 โดยอัตโนมัติซึ่งจะนำไปสู่ข้อผิดพลาด
0xff คือการทำศัลยกรรมพลาสติกโดยค่าเริ่มต้นดังนั้นเมื่อไบต์และ 0xff มีส่วนเกี่ยวข้องไบต์จะถูกแปลงเป็นการผ่าตัดพลาสติกก่อนดังนั้น 24 บิตสูงในผลลัพธ์จะถูกล้างด้วย 0 ดังนั้นผลลัพธ์จึงเป็นสิ่งที่เราต้องการเสมอ
มีวิธีการสรุปออนไลน์บางอย่าง:
แปลงสตริงเป็น hexadecimal string วิธี 1:
/ *** แปลงสตริงเป็น hexadecimal String*/ String String สาธารณะ Str2Hexstr (String str) {char [] chars = "0123456789abcdef" .tochararray (); StringBuilder sb = new StringBuilder (""); ไบต์ [] bs = str.getBytes (); int บิต; สำหรับ (int i = 0; i <bs.length; i ++) {bit = (bs [i] & 0x0f0) >> 4; sb.append (chars [bit]); bit = bs [i] & 0x0f; sb.append (chars [bit]); } return sb.toString (); -แปลงสตริง Hexadecimal เป็นวิธีอาร์เรย์ 1:
/ ** * แปลง hexstring เป็น byte array * @param hexstring * @return byte [] * / public Static byte [] hexstringTobyte (สตริง hex) {int len = (hex.length () / 2); ไบต์ [] result = byte ใหม่ [len]; char [] achar = hex.tochararray (); สำหรับ (int i = 0; i <len; i ++) {int pos = i * 2; ผลลัพธ์ [i] = (ไบต์) (tobyte (achar [pos]) << 4 | tobyte (achar [pos + 1])); } ผลตอบแทนผลลัพธ์; } ส่วนตัวคงที่ int tobyte (ถ่าน C) {byte b = (byte) "0123456789abcdef" .indexof (c); กลับ B; -แปลงอาร์เรย์เป็นสตริง hexadecimal 1:
/ ** * แปลงอาร์เรย์เป็น hex string * @param byte [] * @return hexstring */ สตริงสุดท้ายคงที่สาธารณะ bytestohexstring (byte [] Barray) {StringBuffer SB = new StringBuffer (Barray.length); สตริง Stemp; สำหรับ (int i = 0; i <barray.length; i ++) {stemp = integer.tohexstring (0xff & barray [i]); if (stemp.length () <2) sb.append (0); sb.append (stemp.touppercase ()); } return sb.toString (); -วิธีที่ 2 ของการแปลงอาร์เรย์ไบต์ [] เป็นสตริงเลขฐานสิบหก:
/ ** * แปลงอาร์เรย์เป็น hex string * @param byte [] * @return hexstring */ สตริงคงที่สาธารณะ tohexstring1 (byte [] b) {stringbuffer buffer = new Stringbuffer (); สำหรับ (int i = 0; i <b.length; ++ i) {buffer.append (tohexstring1 (b [i])); } return buffer.toString (); } สตริงคงที่สาธารณะ tohexstring1 (byte b) {string s = integer.tohexstring (b & 0xff); if (s.length () == 1) {return "0" + s; } else {return s; -วิธีที่ 1 ของสตริงการแปลงสตริง hexadecimal:
/ ** * แปลง hexstring เป็นสตริง * @param hexstring * @return สตริง */ สตริงคงที่สาธารณะ hexstr2str (สตริง hexstr) {string str = "0123456789abcdef"; ถ่าน [] hexs = hexstr.tochararray (); ไบต์ [] ไบต์ = ไบต์ใหม่ [hexstr.length () / 2]; int n; สำหรับ (int i = 0; i <bytes.length; i ++) {n = str.indexof (hexs [2 * i]) * 16; n + = str.indexof (hexs [2 * i + 1]); ไบต์ [i] = (ไบต์) (n & 0xff); } ส่งคืนสตริงใหม่ (ไบต์); -วิธีที่ 2 ของการแปลงสตริงในสตริงเลขฐานสิบหก:
/ ** * hexstring แปลงสตริง * @param hexstring * @return string * / สตริงคงที่สาธารณะ toStringhex (สตริง s) {byte [] bakeyword = ไบต์ใหม่ [s.length () / 2]; สำหรับ (int i = 0; i <bakeyword.length; i ++) {ลอง {bakeyword [i] = (byte) (0xff & integer.parseint (s.substring (i * 2, i * 2+2), 16)); } catch (exception e) {e.printstacktrace (); }} ลอง {s = สตริงใหม่ (bakeyword, "utf-8"); // utf-16le: ไม่} catch (Exception e1) {e1.printstacktrace (); } return s; -บทความข้างต้นเกี่ยวกับการแปลง Java วิธีการแปลงของ BYTE และ Hexadecimal เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น