머리말
Java가 TCP/IP 소켓의 다른 언어로 작성된 프로그램과 통신하면 통신 내용은 일반적으로 byte 배열 유형으로 변환되며 Java는 문자와 배열을 변환하기에 매우 편리합니다. 문자열과 byte 변환의 원리에 대해 알아 보겠습니다.
원칙
우리는 Java에서 byte 유형이 1 바이트, 즉 8 비트, 16 진 문자는 4 비트를 차지하므로 각 byte 두 문자로 표시 될 수 있으며 그 반대도 마찬가지입니다.
예를 들어보세요
바이트 = 123
이진 표현 : 0111 1011
각 4 자리는 문자로 표시됩니다. 7 b
예, 원칙은 간단합니다. 코드로 구현합시다.
바이트 []는 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]; // 각 바이트는 두 문자에 해당합니다. 최종 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]; // BYTE의 4 비트를 저장합니다. 첫 번째 RES [j ++] = HexDigits [SRC [i] & 0x0f]; // BYTE의 낮은 4 비트를 다시 저장} 새 문자열 (RES)을 반환합니다. } 방법 2
아이디어 : 먼저 byte int 유형으로 변환 한 다음 String으로 변환합니다.
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 ++) {// 바이트와 0xff를 사용하는 이유는 int가 32 비트이기 때문입니다. 0xff와 일치 한 후, 처음 24 비트는 폐기되며, 마지막 8 비트 만 유지 된 String str = integer.tohexstring (src [i] & 0xff); if (str.length () <2) {// 2 비트 미만이 필요한 경우 0을 추가해야합니다. } StringBuilder.Append (str); } return stringBuilder.toString (); } 16 진수 문자열 to byte []
아이디어 : 먼저 문자열을 char[] 로 변환 한 다음 byte[] 로 변환합니다.
public static byte [] hextobytes (String hexstring) {if (hexstring == null || hexstring.equals ( "")) {return null; } int length = hexstring.length () / 2; char [] hexchars = hexstring.tochararray (); 바이트 [] 바이트 = 새로운 바이트 [길이]; 문자열 hexDigits = "0123456789ABCDEF"; for (int i = 0; i <길이; i ++) {int pos = i * 2; // 두 문자는 하나의 바이트 int h = hexdigits.indexof (hexchars [pos]) << 4에 해당합니다. // 참고 1 int l = hexdigits.indexof (hexchars [pos + 1]); // 참고 2 if (h == -1 || l == -1) {// 비 exadecimal 문자 return null; } 바이트 [i] = (byte) (h | l); } 반환 바이트; } 참고 : 참고 1은 xxxx0000 가져오고, 참고 2는 0000xxxx 얻은 다음 두 문자를 byte 로 변환합니다.
또 다른 예를 제시하십시오
MD5 암호화
public static string getMd5byFile (파일 파일) {String ret = null; fileInputStream fis = null; try {fis = new FileInputStream (파일); MessageDigest MD = MessageDigest.getInstance ( "MD5"); 바이트 [] 버퍼 = 새로운 바이트 [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; }요약
좋아요, 이해해야합니다. 어렵지 않습니다. 위는이 기사의 전체 내용입니다. 이 기사의 내용이 모든 사람의 연구 나 업무에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.