هناك العديد من الطرق لتحويل النظام الثنائي في جافا. من بينها ، هناك فصول التعبئة والتغليف من أجل السداسي العشري الثنائي العشري الأساسي ، وما إلى ذلك ، والتي لا تحتاج إلى تنفيذها من خلال خوارزميات خارج. التفاصيل كما يلي:
بادئ ذي بدء ، أبسط طرق التحويل الثنائية هي:
تحويل عشري إلى سداسي عشري:
سلسلة integer.tohexstring (int i)
تحويل العشري إلى ثماني
سلسلة integer.tooctalsstring (int i)
تحويل عشري إلى ثنائي
سلسلة integer.tobinarystring (int i)
تحويل سداسي عشري إلى عشري
integer.valueof ("FFFF" ، 16) .ToString () // لا يمكن التعامل مع البادئة 0x
تحويل ثماني إلى عشري
integer.valueof ("76" ، 8) .ToString () // prefix 0 يمكن معالجتها لتكون ثنائية للعشرية
integer.valueof ("0101" ، 2) .ToString ()
هل هناك أي طريقة لتحويل 2 و 8 مباشرة ، سداسي عشري إلى عشري؟
java.lang.integer فئة
Parseint (String 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) trowsa numberformatexception
Parseint ("99" ، trowsa numberformatexception
Parseint ("Kona" ، 10) Trowsa numberformatexception
Parseint ("Kona" ، 27) يعود 411787
كيفية كتابة تحويل ثنائي (اثنان ، ثمانية ، ستة عشر) بدون خوارزمية
عدد صحيح
عدد صحيح
integer.tohexstring
ثم قدم تحويل الأرقام البايت والبايت في جافا
تحليل المبدأ:
يتكون البايت في Java من 8 بت ، والدولة السداسية هي الدولة في 16 ، والتي يمثلها 4 بتات لأن 24 = 16. حتى نتمكن من تحويل بايت إلى حرفين سداسي عشري ، أي تحويل الأرقام المرتفعة 4 و 4 منخفضة إلى أحرف سداسية سداسية المقابلة ، ونجمع بين هذين السلاسل السداسية السداسية للحصول على السلسلة السداسية من البايت. وبالمثل ، فإن التحويل المعاكس يحول أيضًا حرفين سداسي عشري إلى بايت واحد.
في Java ، هناك فكرتان رئيسيتان لتحويل البايتات و hexadecimal:
1. عندما يتم تحويل البايت الثنائي إلى سداسي عشري ، قم بإجراء "و" تشغيل البايت العالي و 0xf0 ، ثم قم بتحويل اليسار بمقدار 4 بت للحصول على سداسي عشري من البايت العالي ؛ قم بتنفيذ عملية "&" للبايت المنخفض و 0x0F للحصول على سداسي عشري B من الأرقام المنخفضة والأرقام ، وتجميع رقمين سداسي عشري في قطعة من AB ، وهو التمثيل السداسي للبايت.
2. عندما سداسي عشري إلى بايت ثنائي ، حرك العدد العشري المقابل للشخصية السداسية إلى اليمين 4 للحصول على البايت العالي A ؛ افعل "|" تشغيل الرقم العشري B و A للشخصية السداسية المقابلة للبايت المنخفض للحصول على تمثيل بايت ثنائي سداسي عشري
واحدة من وظائف التحويل هي كما يلي:
/** * * @param bytes * regurn تحويل ثنائي إلى إخراج حرف hexadecimal */</span> سلسلة ثابتة خاصة hexstr = "0123456789abcdef" ؛ // Global Public String BinaryToExString (byte [] bytes) {string result = "" ؛ سلسلة hex = "" ؛ لـ (int i = 0 ؛ i <bytes.length ؛ i ++) {// bytes 4 بتات أعلى <strong> hex = string.valueof (hexstr.charat ((bytes [i] & 0xf0) >> 4)) ؛ </strong> // bytes 4 بت أقل <strong> Hex += string.valueof (Hexstr.charat (bytes [i] & 0x0f)) ؛ </strong> النتيجة += Hex ؛ } نتيجة الإرجاع ؛ }/** * * param hexstring * @RETURN تحويل hexadecimal إلى مجموعة البايت */البايت الثابت العام [] HexStringTobinary (String hexstring) {// يتم تقريب طول Hexstring بمقدار 2 ، مثل طول البايت int len = hexstring.length ()/2 ؛ Byte [] bytes = new byte [len] ؛ بايت مرتفع = 0 ؛ // البايت مرتفع بايت ذو أربع بتات منخفضة = 0 ؛ // البايت المنخفض أربعة bit لـ (int i = 0 ؛ i <len ؛ i ++) {// Transfer to the Bits الأربعة اليمنى للحصول على البت المرتفع = (byte) ((hexstr.indexof (hexstring.charat (2*i))) << 4) ؛ low = (byte) hexstr.indexof (hexstring.charat (2*i+1)) ؛ البايتات [i] = (بايت) (عالية | منخفضة) ؛ // عالية الحالة أو التشغيل} بايت إرجاع ؛ }} هناك أيضًا طريقة مماثلة:
<span style = "font-size: 14px ؛">* تحويل البايت [] إلى سلسلة Hex. هنا يمكننا تحويل البايت إلى int ، ثم استخدام integer.toHexString (int) للتحويل إلى سلسلة hex.
* param src byte [] data * regurn hex string */ public static 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 * regurn byte [] * / public static byte [] HexStringTobytes (String hexstring) {if (hexstring == null || hexstring.equals ("") {return null ؛ } hexstring = hexstring.toupperCase () ؛ طول int = hexstring.length () / 2 ؛ char [] hexchars = hexstring.tochararray () ؛ بايت [] د = بايت جديد [طول] ؛ لـ (int i = 0 ؛ i <length ؛ i ++) {int pos = i * 2 ؛ d [i] = (byte) (chartobyte (hexchars [pos]) << 4 | chartobyte (hexchars [pos + 1])) ؛ } العودة د ؛ } / ** * تحويل char إلى byte * param c char * return byte * / private byte chartobyte (char c) {return (byte) "0123456789ABCDEF" .indexof (c) ؛ } </span>الطريقتان متشابهتان ، يرجى ملاحظة هنا
ما سبق هو سلسلة تحول البايت [] إلى سداسي عشري. لاحظ أن B [i] & 0xff يقوم بحساب بايت و 0xff ، ثم يستخدم integer.toHexString للحصول على السلسلة السداسية. يمكنك أن ترى ذلك
B [i] & 0xff لا تزال عملية int ، فلماذا تحتاج إلى إجراء عملية int مع 0xFF؟ INTEGER.TOHEXSTRING (B [i]) ؛ ، لا يمكن إجبار البايت على تحويلها؟ الجواب لا.
السبب هو:
1. حجم البايت هو 8 بت وحجم int هو 32 بت
2. يستخدم نظام جافا المكون من جزأين مكملاً
لذلك ، عندما تكون الأرقام السالبة وعلى الأرقام السلبية ، ستملأ الأرقام السلبية تلقائيًا 1 ، مما سيؤدي إلى أخطاء
0xFF هي الجراحة التجميلية بشكل افتراضي ، لذلك عند تورط بايت و 0xFF ، سيتم تحويل البايت إلى عملية جراحية تجميلية أولاً ، وبالتالي سيتم دائمًا مسح النتيجة المرتفعة في النتيجة ، وبالتالي فإن النتيجة هي دائمًا ما نريد.
هناك بعض الطرق الموجزة عبر الإنترنت:
تحويل السلسلة إلى طريقة السلسلة السداسية 1:
/ *** تحويل السلسلة إلى سلسلة hexadecimal*/ السلسلة الثابتة العامة str2Hexstr (String str) {char [] chars = "0123456789ABCDEF" .tochararray () ؛ StringBuilder sb = new StringBuilder ("") ؛ byte [] bs = str.getBytes () ؛ البت لـ (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 () ؛ }تحويل السلسلة السداسية إلى طريقة الصفيف 1:
/ ** * تحويل HexString إلى صفيف البايت * param hexstring * return byte [] * / public static byte [] HexStringTobyte (String hex) {int len = (hex.length () / 2) ؛ byte [] result = new byte [len] ؛ char [] achar = hex.tochararray () ؛ لـ (int i = 0 ؛ i <len ؛ i ++) {int pos = i * 2 ؛ النتيجة [i] = (byte) (tobyte (achar [pos]) << 4 | tobyte (Achar [pos + 1])) ؛ } نتيجة الإرجاع ؛ } private static int tobyte (char c) {byte b = (byte) "0123456789ABCDEF" .indexof (c) ؛ العودة ب ؛ }تحويل المصفوفة إلى طريقة السلسلة السداسية 1:
/ ** * تحويل المصفوفة إلى سلسلة hex * param byte [] * @regurn 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 * param byte [] * @regurn hexstring */ string static public 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 ؛ } آخر {return s ؛ }}الطريقة 1 من سلسلة تحويل السلسلة السداسية:
/ ** * تحويل hexstring إلى سلسلة * param hexstring * regurn string */ static string public hexstr2str (string hexstr) {string str = "0123456789abcdef" ؛ char [] hexs = hexstr.tochararray () ؛ byte [] bytes = new byte [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]) ؛ Bytes [i] = (byte) (n & 0xff) ؛ } إرجاع سلسلة جديدة (بايت) ؛ }الطريقة 2 من تحويل الأوتار في السلاسل السداسية:
/ ** * hexString تحويل السلسلة * param hexstring * @regurn string * / string static public toStringHex (سلسلة s) {byte [] bakeyword = new byte [s.length () / 2] ؛ لـ (int i = 0 ؛ i <bakeyword.length ؛ i ++) {try {bakeyword [i] = (byte) (0xff & integer.parseint (S.SubString (i * 2 ، i * 2+2) ، 16)) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} try {s = new string (bakeyword ، "utf-8") ؛ // utf-16le: not} catch (استثناء e1) {e1.printstacktrace () ؛ } العودة s ؛ }المقالة أعلاه حول تحويل Java وطريقة تحويل Byte و Hexadecimal كلها المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.