Vorwort
Wenn Java mit Programmen kommuniziert, die in anderen Sprachen in TCP/IP -Socket geschrieben wurden, wird der Kommunikationsinhalt im Allgemeinen in byte -Array -Typ umgewandelt, und Java ist auch sehr bequem, Zeichen und Arrays zu konvertieren. Lassen Sie mich etwas über das Prinzip der Konvertierung von Strings und byte erfahren
Prinzip
Wir alle wissen, dass der byte -Typ in Java 1 Byte, dh 8 Bit, nimmt, während die hexadezimalen Zeichen 4 Bit besetzen, sodass jedes byte durch zwei Zeichen dargestellt werden kann und umgekehrt.
Geben Sie ein Beispiel an
Byte = 123
In binärer Darstellung: 0111 1011
Jede 4 Ziffern werden durch Zeichen dargestellt: 7 b
Ja, das Prinzip ist so einfach, lassen Sie es mit Code implementieren:
Byte [] zu hexadezimaler Saite
Methode 1
Idee: Konvertieren Sie zuerst byte[] in dimensionale char[] und wandeln Sie char[] in String um
public static String bytes2hex (byte [] src) {if (src == null || src.length <= 0) {return null; } char [] res = new char [src.length * 2]; // Jedes Byte entspricht zwei Zeichen endgültig Zeichen hexDigits [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', ',',}; für (int i = 0, j = 0; i <src.length; i ++) {res [j ++] = hexDigits [src [i] >> 4 & 0x0f]; // Speichern Sie die hohen 4 Bits Byte First Res [j ++] = hexDigits [SRC [i] & 0x0f]; // Noch die niedrigen 4 Bit Bit Byte speichern} Neue String zurückgeben (res); } Methode 2
Idee: Konvertieren Sie zuerst byte in int -Typ und konvertieren Sie sie in die Zeichenfolge
public static String byTestohex (byte [] src) {if (src == null || src.length <= 0) {return null; } StringBuilder StringBuilder = new StringBuilder (""); für (int i = 0; i <src.length; i ++) {// Der Grund für die Verwendung von Byte und 0xff ist zu kombinieren, dass int 32 Bit beträgt. Nach dem Zusammenhang mit 0xFF werden die ersten 24 Bit verworfen, und nur die letzten 8 Bits werden beibehalten String Str = Integer.tohexString (SRC [i] & 0xff); if (str.length () <2) {// Wenn weniger als zwei Bits erforderlich sind, muss 0 StringBuilder.Append (0) hinzugefügt werden; } StringBuilder.Append (str); } return StringBuilder.toString (); } Hexadezimale Zeichenfolge zu byte []
Idee: Konvertieren Sie zuerst die Zeichenfolge in char[] und konvertieren Sie sie in byte[]
public static byte [] hextobytes (String hexstring) {if (hexstring == null || hexstring.equals ("")) {return null; } int länge = hexstring.length () / 2; char [] hexchars = hexstring.toarArray (); byte [] bytes = new Byte [Länge]; String hexDigits = "0123456789abcdef"; für (int i = 0; i <länge; i ++) {int pos = i * 2; // Zwei Zeichen entsprechen einem Byte int h = hexDigits.indexof (hexchars [pos]) << 4; // Anmerkung 1 int l = hexDigits.indexof (hexchars [pos + 1]); // Anmerkung 2 if (h == -1 || l == -1) {// Nicht -Hexadecimal -Zeichen return null; } bytes [i] = (byte) (h | l); } return bytes; } HINWEIS: HINWEIS 1 erhält xxxx0000 , Hinweis 2 erhält 0000xxxx und wandelt dann zwei Zeichen in ein byte .
Geben Sie ein anderes Beispiel an
MD5 -Verschlüsselung
public static String getMd5ByFile (Dateidatei) {String ret = null; FileInputStream fis = null; try {fis = new FileInputStream (Datei); MessagedIGest MD = MessagedIGest.getInstance ("md5"); byte [] buffer = neues byte [1024]; Int len; while ((len = fis.read (puffer))> 0) {md.update (buffer, 0, len); } ret = bytes2hex (md.Digest ()); // MD5 verschlüsselt Byte [] in eine String} catch (Ausnahme e) {e.printstacktrace (); } endlich {if (fis! = null) {try {fis.close (); } catch (ioException e) {e.printstacktrace (); }}} return return; }Zusammenfassen
Ok, ich sollte verstehen, es ist nicht schwierig. Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird für das Studium oder die Arbeit aller Hilfe helfen. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.