Préface
Lorsque Java communique avec des programmes écrits dans d'autres langues dans la prise TCP / IP, le contenu de communication est généralement converti en type de tableau byte , et Java est également très pratique pour convertir des caractères et des tableaux. Permettez-moi de découvrir le principe de la conversion des chaînes et byte
principe
Nous savons tous qu'en Java, le type byte prend 1 octet, c'est-à-dire 8 bits, tandis que les personnages hexadécimaux occupent 4 bits, donc chaque byte peut être représenté par deux caractères, et vice versa.
Donner un exemple
octet = 123
En représentation binaire: 0111 1011
Chaque 4 chiffres sont représentés par des caractères: 7 b
Oui, le principe est aussi simple, implémentons-le avec le code:
octet [] à la chaîne hexadécimale
Méthode 1
Idée: d'abord convertir byte[] en char[] , puis convertir char[] en chaîne
public static String bytes2Hex (byte [] src) {if (src == null || src.length <= 0) {return null; } char [] res = new char [src.length * 2]; // chaque octet correspond à deux caractères Final Char hexdigits [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' '}; for (int i = 0, j = 0; i <src.length; i ++) {res [j ++] = hexDigits [src [i] >> 4 & 0x0f]; // Enregistrez les 4 bits élevés d'octet First Res [J ++] = hexDigits [src [i] & 0x0f]; // Enregistrer à nouveau les 4 bits bas d'octets} Renvoie une nouvelle chaîne (res); } Méthode 2
Idée: convertissez d'abord byte en type int , puis convertissez en chaîne
Public Static String byTestOhex (byte [] src) {if (src == null || src.length <= 0) {return null; } StringBuilder stringBuilder = new StringBuilder (""); pour (int i = 0; i <src.length; i ++) {// La raison de l'utilisation de l'octet et 0xff doit être combinée est parce que int est 32 bits. Après correspondance avec 0xFF, les 24 premiers bits sont jetés, et seuls les 8 derniers bits sont conservés String str = Integer.tohexString (src [i] & 0xff); if (str.length () <2) {// Si moins de deux bits sont nécessaires, 0 doit être ajouté StringBuilder.append (0); } stringBuilder.append (str); } return StringBuilder.ToString (); } Corde hexadécimale à octet []
Idée: convertissez d'abord la chaîne en char[] , puis convertissez-la en byte[]
octet statique public [] hexto-great (chaîne hexstring) {if (hexstring == null || hexstring.equals ("")) {return null; } int length = hexstring.length () / 2; char [] hexchars = hexstring.tocharay (); octet [] octets = nouveau octet [longueur]; String hexDigits = "0123456789AbcDef"; pour (int i = 0; i <length; i ++) {int pos = i * 2; // Deux caractères correspondent à un octet int h = hexdigits.indexof (hexchars [pos]) << 4; // Remarque 1 int l = hexdigits.indexof (hexchars [pos + 1]); // Remarque 2 if (h == -1 || l == -1) {// Les caractères non hexadécimaux renvoient null; } octets [i] = (byte) (h | l); } retour des octets; } Remarque: Remarque 1 obtient xxxx0000 , la note 2 obtient 0000xxxx , puis convertit deux caractères en byte .
Donner un autre exemple
cryptage MD5
String statique public getmd5byfile (fichier de fichier) {String ret = null; FileInputStream fis = null; try {fis = new FileInputStream (fichier); MessagediGest MD = MessagediGest.getInstance ("MD5"); octet [] tampon = nouveau octet [1024]; int len; while ((len = fis.read (tampon))> 0) {md.update (tampon, 0, len); } ret = bytes2hex (md.digest ()); // Convertir MD5 Byte crypté [] en une chaîne} catch (exception e) {e.printStackTrace (); } enfin {if (fis! = null) {try {fis.close (); } catch (ioException e) {e.printStackTrace (); }}} return return; }Résumer
Ok, je devrais comprendre, ce n'est pas difficile. Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera d'une aide à l'étude ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer.