序文
JavaがTCP/IPソケットの他の言語で記述されたプログラムと通信すると、通信コンテンツは一般にbyte配列タイプに変換され、Javaは文字と配列を変換するのに非常に便利です。文字列とbyte変換する原理について学ばせてください
原理
Javaでは、 byteタイプが1バイト、つまり8ビット、16進数文字が4ビットを占めるため、各byte 2文字で表すことができ、逆も同様であることを知っています。
例を挙げてください
バイト= 123
バイナリ表現: 0111 1011
各4桁は文字で表されます: 7 b
はい、原則はそれほど単純です。コードを使用して実装しましょう。
Byte []から16進文字列へ
方法1
アイデア:最初にbyte[]寸法char[]に変換し、次にchar[]文字列に変換します
public static string bytes2hex(byte [] src){if(src == null || src.length <= 0){return null; } char [] res = new char [src.length * 2]; //各バイトは2文字に対応します最終char hexdigits [] = {'0'、 '1'、 '2'、 '3'、 '4'、 '5'、 '6'、 '7'、 '9'、 'a'、 'b'、 'c'、 'd'、 'e' f '}に対応します。 for(int i = 0、j = 0; i <src.length; i ++){res [j ++] = hexdigits [src [i] >> 4&0x0f]; //最初のres [j ++] = hexdigits [src [i]&0x0f]; //再び4ビットの低い4ビットを保存}新しい文字列(res)を返します。 }方法2
アイデア:最初にbyteをintタイプに変換し、次に文字列に変換します
public static string bytestohex(byte [] src){if(src == null || src.length <= 0){return null; } stringbuilder stringbuilder = new StringBuilder( ""); for(int i = 0; i <src.length; i ++){// byteと0xffを使用する理由は、intが32ビットであるためです。 0xffと一致した後、最初の24ビットは破棄され、最後の8ビットのみが保持されますstring str = integer.tohexstring(src [i]&0xff); if(str.length()<2){// 2ビット未満が必要な場合、0をstringbuilder.append(0)を追加する必要があります。 } stringbuilder.append(str); } return stringbuilder.toString(); } 160個の文字列への文字列[]
アイデア:最初に文字列をchar[]に変換し、次にbyte[]
public static byte [] hextobytes(string hexstring){if(hexstring == null || hexstring.equals( "")){return null; } int length = hexstring.length() / 2; char [] hexchars = hexstring.tochararray(); byte [] bytes = new byte [length];文字列hexdigits = "0123456789ABCDEF"; for(int i = 0; i <length; i ++){int pos = i * 2; // 2つの文字が1つのバイトに対応しますint h = hexdigits.indexof(hexchars [pos])<< 4; //注1 int l = hexdigits.indexof(hexchars [pos + 1]); //注2(h == -1 || l == -1){//非麻痺文字はnullを返します。 } bytes [i] =(byte)(h | l); }バイトを返します。 }注:注1はxxxx0000取得し、注2は0000xxxx取得し、2つの文字をbyteに変換します。
別の例を挙げてください
MD5暗号化
public static string getmd5byfile(file file){string ret = null; fileinputStream fis = null; try {fis = new fileinputStream(file); MESSAGEDGEST MD = MESSAGEDGEST.GETINSTANCE( "MD5"); byte [] buffer = new byte [1024]; int len; while((len = fis.read(buffer))> 0){md.update(buffer、0、len); } ret = bytes2hex(md.digest()); // md5暗号化されたバイト[]を文字列に変換} catch(例外e){e.printstacktrace(); }最後に{if(fis!= null){try {fis.close(); } catch(ioexception e){e.printstacktrace(); }}} return return; }要約します
わかりました、私は理解する必要があります、それは難しくありません。上記は、この記事のコンテンツ全体です。この記事の内容が、すべての人の勉強や仕事に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。