تصف هذه المقالة تنفيذ Java لفئة أداة التحويل الثنائية. شاركه للرجوع إليه ، على النحو التالي:
استيراد java.nio.charset.charset ؛/*** سداسي عشري (اختصار كـ hex أو subcript 16) هو نظام حمل في الرياضيات التي تمر من 16 إلى 1. يتم تمثيلها عمومًا بالأرقام من 0 إلى 9 والأحرف A إلى F (حيث: A ~ F 10 ~ 15). <br> * على سبيل المثال ، يتم كتابة الرقم العشري 57 في الثنائي 111001 ويتم كتابة السداسي عشري 39 في سداسي عشري. <br> * من أجل التمييز بين القيم السداسية عشرية والعشرية ، ستقوم لغات مثل Java و C * */فئة عامة hexkit {/** * * مصفوفة حرف صغيرة تستخدم لإنشاء إخراج الأحرف السداسية */char final static char [] digits_lower = {'0' ، '1' ، '2' ، '3' ، '4' ، '5' ، '6' ، '7' ، '8' ، '،' a '،' b '،' ، / *** صفيف أحرف رأس المال يستخدم لإنشاء إخراج الأحرف السداسية*/ char Final Static Final [] Digits_upper = {'0' ، '1' ، '2' ، '3' ، '4' ، '5' ، '6' ، '7' ، '8' ، '9' ، 'a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'f' ) regurn hex char [] */ public static char [] encodeHex (byte [] data) {return encodeHex (data ، true) ؛ } / *** قم بتحويل مجموعة بايت إلى صفيف حرف سداسي عشري** param str string* param charset الترميز* @regurn char []* / public static char [] encodeHex (String str ، charset charset) }/** * تحويل صفيف البايت إلى صفيف الأحرف السداسية * * param بيانات BYTE [] * param tolowercase <code> true </code> نقل إلى تنسيق صغير ، <code> خطأ </code> نقل إلى تنسيق كبير * toloweraze (data endaze charexcase) Digits_lower: Digits_upper) ؛ } / ** * تحويل صفيف البايت إلى سلسلة سداسية * * param بيانات byte [] * @regurn hexstring * / public static string EncodeHexstr (byte [] data) {return EncodeHexStr (data ، true) ؛ }/** * تحويل صفيف البايت إلى سلسلة hex * * param بيانات بايت [] * param tolowercase <code> true </code> نقل إلى تنسيق صغير ، <code> false </code> نقل إلى تنسيق كبير * @return hexstring */public static encodehexstr (byte [] boalean tolowrase) Digits_upper) ؛ } . --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DecodeHexstr (Hexstr.ToChararray () ، charset) ؛ } / *** تحويل صفيف حرف Hex إلى String** param hexdata hex char []* param charset الترميز* @regurn string* / string static public decodehexstr (char [] hexdata ، charset charset) {return strkit.str (decodehex (hexdata) } / ** * تحويل صفيف حرف Hex إلى Array Byte * * param hexdata hex char [] * return byte [] * throws runtimeexception إذا كان صفيف الحرف السداسي المصدر هو طول غريب ، سيتم إلقاء استثناء وقت التشغيل * / public static byte [] decodehex (char [] hexdata) if ((ly & 0x01)! = 0) {رمي new runTimeException ("عدد فردي من الأحرف.") ؛ } byte [] out = new byte [len >> 1] ؛ // تشكل حرفين قيمة سداسي عشرية. لـ (int i = 0 ، j = 0 ؛ j <len ؛ i ++) {int f = todigit (hexdata [j] ، j) << 4 ؛ J ++ ؛ f = f | Todigit (Hexdata [J] ، J) ؛ J ++ ؛ Out [i] = (byte) (f & 0xff) ؛ } العودة ؛ } ) todigits) {إرجاع سلسلة جديدة (encodeHex (البيانات ، todigits)) ؛ } / ** * تحويل صفيف البايت إلى صفيف أحرف hex * * param byte [] * param todigits char [] للتحكم في الإخراج * @regurn hex char [] * / private static char [] encodehex (byte [] data ، char [] todigits) {int l = data.length ؛ char [] out = new Char [l << 1] ؛ // تشكل حرفين قيمة سداسي عشرية. لـ (int i = 0 ، j = 0 ؛ i <l ؛ i ++) {out [j ++] = todigits [(0xf0 & data [i]) >>> 4] ؛ Out [j ++] = todigits [0x0f & data [i]] ؛ } العودة ؛ } / *** تحويل الأحرف السداسية إلى عدد صحيح** param ch hexadecimal char* param index موقف الشخصيات السداسية في صفيف الأحرف* return integer* athrows runtimeexception عندما لا يكون ch hexadecimal حرفًا قانونيًا ، قم بإلقاء استثناء من وقت التشغيل* / static indigit ( الحرف. digit (الفصل ، 16) ؛ if (digit == -1) {رمي new RunTimeException ("الحرف السداسي غير الشرعي" + ch + "في index" + index) ؛ } رقم الإرجاع ؛ } ) bString.length () ٪ 8! = 0) إرجاع فارغ ؛ StringBuffer TMP = New StringBuffer () ؛ int itmp = 0 ؛ لـ (int i = 0 ؛ i <bstring.length () ؛ i += 4) {itmp = 0 ؛ لـ (int j = 0 ؛ j <4 ؛ j ++) {itmp + = integer.parseint (bstring.substring (i + j ، i + j + 1)) << (4 - j - 1) ؛ } tmp.append (integer.toHexString (ITMP)) ؛ } return tmp.toString () ؛ } / ** * HexString * param hexstring * @return * / public static string hex2binary (string hexstring) {if (hexstring == null || hexstring.length () ٪ 2! = 0) return null ؛ سلسلة bString = "" ، tmp ؛ لـ (int i = 0 ؛ i <hexstring.length () ؛ i ++) {tmp = "0000" integer.tobinaryString (integer.parseint (HexString.SubString (i ، i + 1) ، 16)) ؛ bString += tmp.substring (tmp.length () - 4) ؛ } إرجاع bstring ؛ } / ** * تحويل ثنائي إلى hex * param buf * @return * / public static string Binary2Hex (byte buf []) {StringBuffer sb = new StringBuffer () ؛ لـ (int i = 0 ؛ i <buf.length ؛ i ++) {string hex = integer.toHexString (buf [i] & 0xff) ؛ if (hex.length () == 1) {hex = '0' + hex ؛ } sb.append (Hex.ToupperCase ()) ؛ } return sb.toString () ؛ } / ** * تحويل hexstr إلى ثنائي * param hexstr * @return * / public static byte [] hex2byte (String hexstr) {if (Hexstr.length () <1) return null ؛ byte [] result = new byte [hexstr.length () / 2] ؛ لـ (int i = 0 ؛ i <hexstr.length () / 2 ؛ i ++) {int high = integer.parseint (hexstr.substring (i * 2 ، i * 2+1) ، 16) ؛ int low = integer.parseint (Hexstr.SubString (i * 2 + 1 ، i * 2 + 2) ، 16) ؛ النتيجة [i] = (byte) (عالية * 16 + منخفضة) ؛ } نتيجة الإرجاع ؛ }}ملاحظة: فيما يلي بعض أدوات التحويل والحساب عبر الإنترنت لهذا الموقع. أعتقد أنه سيكون مفيدًا لك:
أداة التحويل التعسفي عبر الإنترنت:
http://tools.vevb.com/transcoding/hexconvert
الآلة الحاسبة القياسية عبر الإنترنت:
http://tools.vevb.com/jisuanqi/JSQ
الآلة الحاسبة العلمية عبر الإنترنت:
http://tools.vevb.com/jisuanqi/jsqkeexue
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.