Kata pengantar
Ketika Java berkomunikasi dengan program yang ditulis dalam bahasa lain di soket TCP/IP, konten komunikasi umumnya dikonversi menjadi jenis array byte , dan Java juga sangat nyaman untuk mengonversi karakter dan array. Izinkan saya belajar tentang prinsip mengkonversi string dan byte
prinsip
Kita semua tahu bahwa di Java, tipe byte mengambil 1 byte, yaitu, 8 bit, sedangkan karakter heksadesimal menempati 4 bit, sehingga setiap byte dapat diwakili oleh dua karakter, dan sebaliknya.
Berikan contoh
byte = 123
Dalam Representasi Biner: 0111 1011
Masing -masing 4 digit diwakili oleh karakter: 7 b
Ya, prinsipnya sederhana, mari kita terapkan dengan kode:
byte [] ke string heksadesimal
Metode 1
Ide: Pertama Konversi byte[] ke char[] , dan kemudian konversi char[] menjadi string
public static string bytes2Hex (byte [] src) {if (src == null || src.length <= 0) {return null; } char [] res = char baru [src.length * 2]; // Setiap byte sesuai dengan dua karakter final char hexdigits [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; untuk (int i = 0, j = 0; i <src.length; i ++) {res [j ++] = hexdigits [src [i] >> 4 & 0x0f]; // Simpan 4 bit tinggi byte pertama res [j ++] = hexdigits [src [i] & 0x0f]; // simpan rendah 4 bit byte lagi} return new string (res); } Metode 2
Ide: Pertama Konversi byte ke int Type, lalu Konversi ke String
public static string bytestoHex (byte [] src) {if (src == null || src.length <= 0) {return null; } StringBuilder StringBuilder = New StringBuilder (""); untuk (int i = 0; i <src.length; i ++) {// Alasan untuk menggunakan byte dan 0xff harus digabungkan adalah karena int adalah 32 bit. Setelah dicocokkan dengan 0xFF, 24 bit pertama dibuang, dan hanya 8 bit terakhir yang ditahan string str = integer.tohexstring (SRC [i] & 0xff); if (str.length () <2) {// jika kurang dari dua bit diperlukan, 0 harus ditambahkan stringBuilder.append (0); } StringBuilder.append (str); } return stringBuilder.toString (); } String heksadesimal ke byte []
Ide: Pertama mengonversi string ke char[] , lalu konversinya menjadi byte[]
public static byte [] hextobytes (string hexString) {if (hexString == null || hexstring.equals ("")) {return null; } int panjang = hexString.length () / 2; char [] hexchars = hexString.tochararray (); byte [] bytes = byte baru [panjang]; String hexdigits = "0123456789AbcDef"; untuk (int i = 0; i <panjang; i ++) {int pos = i * 2; // Dua karakter sesuai dengan satu byte int h = hexdigits.indexof (hexchars [pos]) << 4; // Catatan 1 int l = hexdigits.indexof (hexchars [pos + 1]); // Catatan 2 if (h == -1 || l == -1) {// karakter non -hexadecimal return null; } bytes [i] = (byte) (h | l); } return byte; } Catatan: Catatan 1 Mendapat xxxx0000 , catatan 2 mendapat 0000xxxx , dan kemudian mengubah dua karakter menjadi byte .
Berikan contoh lain
Enkripsi MD5
string statis publik getMd5byFile (file file) {string ret = null; FileInputStream fis = null; coba {fis = new fileInputStream (file); MessageDigest MD = MessageSmentIgest.getInstance ("md5"); byte [] buffer = byte baru [1024]; int len; while ((len = fis.read (buffer))> 0) {md.update (buffer, 0, len); } ret = bytes2Hex (md.digest ()); // Konversi byte terenkripsi MD5 [] menjadi string} catch (Exception e) {e.printstacktrace (); } akhirnya {if (fis! = null) {coba {fis.close (); } catch (ioException e) {e.printstacktrace (); }}} return kembali; }Meringkaskan
Oke, saya harus mengerti, itu tidak sulit. Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu untuk belajar atau bekerja semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.