Java에서 이진 시스템을 변환하는 방법에는 여러 가지가 있습니다. 그중에는 2 개의 아웃 알고리즘을 통해 구현할 필요가없는 일반적인 기본 바이너리 옥탈 소수점 육각형 등에 대한 포장 클래스가 있습니다. 세부 사항은 다음과 같습니다.
우선, 가장 간단한 이진 변환 방법은 다음과 같습니다.
10 진수로 소수점을 변환하십시오.
문자열 integer.toHexString (int I)
10 진수로 변환합니다
문자열 integer.tooctalstring (int i)
소수점을 바이너리로 변환합니다
String Integer.tobinaryString (int I)
16 진수를 10 진수로 변환하십시오
integer.valueof ( "ffff", 16) .tostring () // prefix 0x를 처리 할 수 없습니다
Octal을 소수로 변환하십시오
integer.valueof ( "76", 8) .toString () // prefix 0은 이진에서 10 진수로 처리 할 수 있습니다.
integer.valueof ( "0101", 2) .tostring ()
2, 8, 16 진수로 직접 변환하는 방법이 있습니까?
java.lang.integer 클래스
parseint (String s, int radix)
두 번째 매개 변수로 지정된 카디널리티를 사용하여 문자열 매개 변수를 서명 된 정수로 구문 분석하십시오.
JDK의 예 :
parseint ( "0", 10)는 0을 반환합니다
Parseint ( "473", 10)는 473을 반환합니다
parseint ( "-0", 10)는 0을 반환합니다
parseint ( "-ff", 16)는 -255를 반환합니다
Parseint ( "1100110", 2)는 102를 반환합니다
parseint ( "2147483647", 10)는 2147483647을 반환합니다
parseint ( "-2147483648", 10)는 -2147483648을 반환합니다
parseint ( "2147483648", 10) wrowsa numberformatexception
parseint ( "99", throwsa numberformatexception
Parseint ( "Kona", 10)는 NumberformateXception을 wrowsa합니다
Parseint ( "Kona", 27)는 411787을 반환합니다
알고리즘없이 이진 변환 (2, 8, 16)을 쓰는 방법
integer.tobinarystring
integer.tooctalstring
integer.tohexstring
그런 다음 Java에서 바이트와 16 진수의 변환을 소개합니다.
원칙 분석 :
Java의 바이트는 8 비트로 구성되어 있으며 16 진수는 16의 상태이며 24 = 16이므로 4 비트로 표시됩니다. 따라서 바이트를 두 개의 16 진 문자로 변환 할 수 있습니다. 마찬가지로, 반대 전환은 또한 두 개의 16 진 문자를 하나의 바이트로 변환합니다.
Java에는 바이트와 16 진전을 변환하기위한 두 가지 주요 아이디어가 있습니다.
1. 이진 바이트가 16 진수로 변환되면 바이트 하이 및 0xf0의 "&"작동을 수행 한 다음 왼쪽을 4 비트로 이동하여 바이트 높이의 16 진수 A를 얻습니다. 바이트 로우 및 0x0F의 "&"작동을 수행하여 낮은 숫자의 16 진수 B를 얻고 두 개의 16 진수 숫자를 AB 조각으로 조립하는데, 이는 바이트의 16 진수 표현입니다.
2. 16 진수에서 이진 바이트를 바이트 할 때, 16 진 문자에 해당하는 십진수를 오른쪽 4로 이동하여 바이트 높이 A를 얻습니다. "|"를하십시오 16 진 바이드 바이트 표현을 얻기 위해 낮은 바이트에 해당하는 16 진 문자의 소수점 번호 B 및 A의 작동
변환 기능 중 하나는 다음과 같습니다.
/** * * @param bytes * @return 바이너리 변환 바이너리가 16 진 문자 출력으로 변환 */</span> private static string hexstr = "0123456789abcdef"; // 글로벌 공개 정적 문자열 binarytoHexString (byte [] bytes) {문자열 result = ""; 문자열 hex = ""; for (int i = 0; i <bytes.length; i ++) {// bytes는 4 비트 더 높습니다. </strong> // 바이트는 4 비트가 4 비트 더 낮습니다. </strong> 결과 += 16 진; } 반환 결과; }/** * * @param hexstring * @return hexadecimal으로 바이트 배열로 변환 */public static by [] hexstringtobinary (string hexstring) {// hexstring의 길이는 2로 둥글게됩니다. 바이트 [] bytes = 새로운 바이트 [len]; 바이트 높이 = 0; // 바이트 높이 4 비트 바이트 최저 = 0; // 바이트 최저 4 비트 (int i = 0; i <len; i ++) {// 오른쪽 4 비트로 전송하여 높은 비트 높이 = (byte) (hexstr.indexof (2*i)); low = (byte) hexstr.indexof (hexstring.charat (2*i+1)); 바이트 [i] = (byte) (높음 | 낮음); // 높은 상태 또는 작동} 반환 바이트; }} 비슷한 방법도 있습니다.
<span style = "font-size : 14px;">* byte []를 16 진수로 변환합니다. 여기서 바이트를 int로 변환 한 다음 integer.tohexstring (int)을 사용하여 16 진수로 변환 할 수 있습니다.
* @param src byte [] data * @return hex string */ public static string bytestohexstring (byte [] src) {StringBuilder StringBuilder = new StringBuilder ( ""); if (src == null || src.length <= 0) {return null; } for (int i = 0; i <src.length; i ++) {int v = src [i] & 0xff; 문자열 hv = integer.tohexstring (v); if (hv.length () <2) {StringBuilder.append (0); } StringBuilder.Append (HV); } return stringBuilder.toString (); } / ** * 육각 문자열로 바이트 [] * @param hexstring hex string * @return byte [] * / public static byte [] hexstringtobytes (String hexstring) {if (hexstring == null || hexstring.equals ( "") {return null; } hexstring = hexstring.toupperCase (); int 길이 = hexstring.length () / 2; char [] hexchars = hexstring.tochararray (); 바이트 [] d = 새로운 바이트 [길이]; for (int i = 0; i <길이; i ++) {int pos = i * 2; d [i] = (byte) (Chartobyte (hexchars [pos]) << 4 | Chartobyte (hexchars [pos + 1]); } 반환 d; } / ** * char를 바이트로 변환 * @param c char * @return byte * / private byte Chartobyte (char c) {return (byte) "0123456789ABCDEF".indexof (c); } </span>두 가지 방법은 비슷합니다. 여기에서 참고하십시오
위는 바이트 []를 16 진수로 변환하는 문자열입니다. b [i] & 0xff는 바이트와 0xff의 계산을 수행 한 다음 integer.tohexstring을 사용하여 16 진 문자열을 얻습니다. 당신은 그것을 볼 수 있습니다
b [i] & 0xff 작업은 여전히 int이므로 0xff로 INT 작업을 수행 해야하는 이유는 무엇입니까? Direct Integer.toHexString (b [i]);, int를 강제로 변환 할 수 없습니까? 대답은 아니오입니다.
그 이유는 :
1. 바이트의 크기는 8 비트이고 int 크기는 32 비트입니다.
2. 자바의 두 부분으로 구성된 시스템은 보완을 사용합니다
따라서 음수 인 경우 및 음수 인 경우 음수가 자동으로 1을 채우므로 오류가 발생합니다.
0xff는 기본적으로 성형 수술이므로 바이트와 0xff가 관련되면 바이트가 성형 수술 수술로 먼저 변환되므로 결과의 높은 24 비트는 항상 0으로 지워집니다. 따라서 결과는 항상 원하는 것입니다.
온라인 요약 방법이 있습니다.
문자열을 16 진수 문자열로 변환합니다.
/ *** 문자열을 16 진수 문자열로 변환*/ public static string str2Hexstr (String Str) {char [] chars = "0123456789ABCDEF".TOCHARARRAY (); StringBuilder sb = new StringBuilder ( ""); 바이트 [] bs = str.getBytes (); int 비트; for (int i = 0; i <bs.length; i ++) {bit = (bs [i] & 0x0f0) >> 4; sb.append (chars [bit]); 비트 = bs [i] & 0x0f; sb.append (chars [bit]); } return sb.toString (); }육각형 문자열을 배열 메소드로 변환합니다.
/ ** * hexstring을 바이트 배열로 변환 * @param hexstring * @return byte [] * / public static byte [] hexstringtobyte (String hex) {int len = (hex.length () / 2); 바이트 [] 결과 = 새로운 바이트 [Len]; char [] achar = hex.tochararray (); for (int i = 0; i <len; i ++) {int pos = i * 2; 결과 [i] = (byte) (Tobyte (achar [pos]) << 4 | Tobyte (Achar [pos + 1]); } 반환 결과; } private static int tobyte (char c) {byte b = (byte) "0123456789ABCDEF".Indexof (c); 반환 b; }배열을 16 진수 문자열로 변환합니다.
/ ** * 배열을 16 진수로 변환 * @param byte [] * @return hexstring */ public static final String bytestoHexString (byte [] barray) {StringBuffer sb = new StringBuffer (barray.length); 문자열 stemp; for (int i = 0; i <barray.length; i ++) {stemp = integer.tohexstring (0xff & barray [i]); if (stemp.length () <2) sb.append (0); sb.append (stemp.touppercase ()); } return sb.toString (); }바이트 [] 배열을 16 진수 문자열로 변환하는 방법 2 :
/ ** * 배열을 16 진수로 변환 * @param byte [] * @return hexstring */ public static string toHexString1 (byte [] b) {StringBuffer 버퍼 = new StringBuffer (); for (int i = 0; i <b.length; ++ i) {buffer.append (tohexstring1 (b [i])); } return buffer.toString (); } public static String toHexString1 (바이트 b) {문자열 s = integer.toHexString (b & 0xff); if (s.length () == 1) {return "0" + s; } else {return s; }}16 진수 문자열 변환 문자열의 메소드 1 :
/ ** * hexString을 문자열로 변환 * @param hexstring * @return String */ public static String hexstr2str (String hexstr) {String str = "0123456789ABCDEF"; char [] hexs = hexstr.tochararray (); 바이트 [] 바이트 = 새로운 바이트 [hexstr.length () / 2]; int n; for (int i = 0; i <bytes.length; i ++) {n = str.indexof (hexs [2 * i]) * 16; n + = str.indexof (hexs [2 * i + 1]); 바이트 [i] = (바이트) (n & 0xff); } 새 문자열 (바이트)을 반환합니다. }16 진수 문자열에서 줄을 변환하는 방법 2 :
/ ** * hexstring convert String * @param hexstring * @return String * / public static String tostringHex (string s) {byte [] bakeyword = new Byte [s.length () / 2]; for (int i = 0; i <bakeyword.length; i ++) {try {bakeyword [i] = (byte) (0xff & integer.parseint (s.substring (i * 2, i * 2+2), 16); } catch (예외 e) {e.printstacktrace (); }} try {s = new String (bakeyword, "utf-8"); // utf-16le : not} catch (예외 e1) {e1.printstacktrace (); } 반환 s; }Java의 변환에 관한 위의 기사, 바이트 및 16 진수의 변환 방법은 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.