Es gibt viele Möglichkeiten, das binäre System in Java umzuwandeln. Unter ihnen gibt es Verpackungsklassen für gemeinsame grundlegende binäre Oktal-Dezimal-Hexadezimal usw., die nicht über zwei Out-Algorithmen implementiert werden müssen. Die Details sind wie folgt:
Erstens sind die einfachsten Binärumwandlungsmethoden:
Dezimal in Hexadezimal konvertieren:
String Integer.tohexString (int i)
Dezimal in Oktal konvertieren
String Integer.tooctalString (int i)
Dezimal in binär konvertieren
String Integer.tobinaryString (int i)
Hexadezimal in Dezimalheit umwandeln
Integer.Valueof ("ffff", 16) .ToString () // Das Präfix 0x kann nicht verarbeitet werden
Oktal in Dezimalheit umwandeln
Integer.Valueof ("76", 8) .ToString () // Präfix 0 kann als binär bis dezimal verarbeitet werden
Integer.Valueof ("0101", 2) .ToString ()
Gibt es eine Möglichkeit, 2, 8, hexadezimal in Dezimal, direkt umzuwandeln?
Java.lang.Ineger Klasse
ParseInt (String S, int Radix)
Verwenden Sie die durch den zweite Parameter angegebene Kardinalität, um den String -Parameter in eine signierte Ganzzahl zu analysieren.
Beispiele von JDK:
ParseInt ("0", 10) gibt 0 zurück
ParseInt ("473", 10) gibt 473 zurück
ParseInt ("-0", 10) gibt 0 zurück
ParseInt (" -ff", 16) kehrt -255 zurück
ParseInt ("1100110", 2) gibt 102 zurück
ParseInt ("2147483647", 10) kehrt 2147483647 zurück
ParseInt (" -2147483648", 10) Returns -2147483648
ParseInt ("2147483648", 10) Throwsa Numberformatexception
ParseInt ("99", Throwsa numberformatexception
ParseInt ("Kona", 10) Throwsa Numberformatexception
Parseint ("Kona", 27) kehrt 411787 zurück
Wie man eine binäre Konvertierung (zwei, acht, sechzehn) ohne Algorithmus schreibt
Integer.TobinaryString
Integer.tooctalString
Integer.tohexString
Stellen Sie dann die Umwandlung von Byte- und Hexadezimalzahlen in Java ein
Prinzipanalyse:
Das Byte in Java besteht aus 8 Bit, und das Hexadezimal ist der Staat 16, der durch 4 Bit dargestellt wird, weil 24 = 16. So können wir ein Byte in zwei hexadezimale Zeichen umwandeln, dh die hohen 4- und niedrigen 4 -stelligen Ziffern in die entsprechenden hexadezimalen Merkmale umwandeln und diese beiden hexadezimalen Saiten kombinieren, um die hexadezimale Byte -Reihe zu erhalten. In ähnlicher Weise wandelt die entgegengesetzte Umwandlung auch zwei hexadezimale Zeichen in ein Byte um.
In Java gibt es zwei Hauptideen für die Konvertierung von Bytes und Hexadezimal:
1. Wenn das binäre Byte in Hexadezimal umgewandelt wird, führen Sie die "&" -Operation des Byte hoch und 0xf0 durch und verschieben Sie dann die linke links um 4 Bit, um das Hexadezimal A des Byte -Hochs zu erhalten. Führen Sie die "&" -Operation des Byte niedrig und 0x0f durch, um die hexadezimale B der Tief- und Ziffern zu erhalten, und montieren Sie zwei hexadezimale Zahlen in ein Stück AB, das die hexadezimale Darstellung des Byte ist.
2. Wenn hexadezimale Bytes hexadezimal sind, bewegen Sie die Dezimalzahl, die dem hexadezimalen Charakter entspricht, nach rechts 4, um das Byte hoch A zu erreichen; Mach das "|" Betrieb der Dezimalzahl B und A des hexadezimalen Charakters, der dem niedrigen Byte entspricht, um die hexadezimale binäre Byte -Darstellung zu erhalten
Eine der Konvertierungsfunktionen ist wie folgt:
/** * * @param bytes * @return konvertieren Binärer in hexadezimaler Zeichenausgang */</span> private statische String hexstr = "0123456789ABCDEF"; // Globale öffentliche statische String -BinaryTohexString (byte [] bytes) {String result = ""; String hex = ""; für (int i = 0; i <bytes.length; i ++) {// Bytes sind 4 Bits höher <strong> hex = String.Valueof (hexstr.charat ((Bytes [i] & 0xf0) >> 4)); </strong> // Bytes sind 4 Bits niedriger <strong> hex += string.valueof (hexstr.charat (Bytes [i] & 0x0f)); </strong> Ergebnis += hex; } Rückgabeergebnis; }/** * * @param hexstring * @return convertieren hexadezimal in byte array */public static byte [] hexstringtObinary (String hexString) {// Die Länge des HexString ist um 2 abgerundet, da die Länge der Bytes int len = hexstring.length ()/2; byte [] bytes = neues byte [len]; Byte hoch = 0; // Das Byte High-Bit-Byte-Byte niedrig = 0; // Das Byte niedrige vier-Bit für (int i = 0; i <len; i ++) {// auf die rechten vier Bits übertragen, um das hohe Bit hoch zu erhalten = (Byte) ((hexstr.indexof niedrig = (Byte) hexstr.indexof (hexstring.charat (2*i+1)); Bytes [i] = (Byte) (hoch | niedrig); // hoher Status oder Betrieb} Return Bytes; }} Es gibt auch eine ähnliche Methode:
<span style = "Schriftgröße: 14px;">* Byte [] in Hex-String konvertieren. Hier können wir Byte in INT konvertieren und dann Integer.tohexString (int) verwenden, um in die Hex -String umzuwandeln.
* @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; } für (int i = 0; i <src.length; i ++) {int v = src [i] & 0xff; String hv = Integer.ToHexString (v); if (hv.length () <2) {stringBuilder.Append (0); } StringBuilder.Append (HV); } return StringBuilder.toString (); } / ** * Die Hex -Zeichenfolge konvertieren in Byte [] * @param hexstring die hexstring * @return byte [] * / public static byte [] hexstringtObytes (String hexstring) {if (hexstring == null || hexstring.equals (") {return null; } hexstring = hexstring.touppercase (); int länge = hexstring.length () / 2; char [] hexchars = hexstring.toarArray (); Byte [] d = neues Byte [Länge]; für (int i = 0; i <länge; i ++) {int pos = i * 2; d [i] = (byte) (chartobyte (hexchars [pos]) << 4 | chartobyte (hexchars [pos + 1]); } return d; } / ** * CHAR in Byte konvertieren * @param c char * @return byte * / private byte chartobyte (char c) {return (byte) "0123456789abcdef" .Indexof (c); } </span>Die beiden Methoden sind ähnlich. Bitte beachten Sie hier
Das obige ist eine Zeichenfolge, die Byte [] in Hexadezimal umwandelt. Beachten Sie, dass B [i] & 0xff eine Berechnung von einem Byte und 0xff durchführt und dann Integer.TohexString verwendet, um die hexadezimale Zeichenfolge zu erhalten. Sie können das sehen
B [i] & 0xff ist immer noch ein int. Warum müssen Sie also eine Int -Operation mit 0xff durchführen? Direct Integer.tohexString (b [i]), kann Byte nicht zwingen, int umgewandelt zu werden? Die Antwort ist nein.
Der Grund ist:
1. Die Größe des Byte beträgt 8 Bit und die Größe von int 32 Bit beträgt 32 Bit
2. Javas zweiteiliger System verwendet Komplement
Wenn negative Zahlen und mit negativen Zahlen sind, füllen die negativen Zahlen also automatisch 1 aus, was zu Fehlern führt
0xff ist standardmäßig plastische Chirurgie. Wenn also ein Byte und 0xff beteiligt sind, wird das Byte zuerst in eine plastische Operation umgewandelt, sodass die hohen 24 -Bit im Ergebnis immer durch 0 gelöscht werden, sodass das Ergebnis immer das ist, was wir wollen.
Es gibt einige Online -Zusammenfassungsmethoden:
Konvertieren Sie die Zeichenfolge in die hexadezimale String -Methode 1:
/ *** Die Zeichenfolge in hexadezimale Zeichenfolge umwandeln StringBuilder sb = new StringBuilder (""); byte [] bs = str.getBytes (); int bit; für (int i = 0; i <Bs.Length; i ++) {bit = (bs [i] & 0x0f0) >> 4; sb.Append (chars [bit]); bit = bs [i] & 0x0f; sb.Append (chars [bit]); } return sb.toString (); }Umwandeln Sie die Hexadezimalzeichenfolge in die Array -Methode 1:
/ ** * HexString in Byte -Array umwandeln byte [] result = new byte [len]; char [] Achar = hex.toarArray (); für (int i = 0; i <len; i ++) {int pos = i * 2; Ergebnis [i] = (Byte) (Tobyte (Achar [pos]) << 4 | Tobyte (Achar [pos + 1])); } Rückgabeergebnis; } private statische int tobyte (char c) {byte b = (byte) "0123456789abcdef" .Indexof (c); Rückkehr B; }Konvertieren Sie das Array in die hexadezimale String -Methode 1:
/ ** * Array in Hex -String umwandeln String Stemp; für (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 (); }Methode 2 der Umwandlung des Byte [] -Array in hexadezimale Zeichenfolge:
/ ** * das Array in Hex -String umwandeln für (int i = 0; i <B.Length; ++ i) {buffer.Append (tohexString1 (b [i])); } return buffer.toString (); } public static String toHexString1 (Byte b) {String S = Integer.ToHexString (B & 0xff); if (s.Length () == 1) {return "0" + s; } else {return s; }}Methode 1 der hexadezimalen String -Konvertierungszeichenfolge:
/ ** * HexString in Zeichenfolge konvertieren * @param hexString * @return String */ public static String hexstr2str (String hexstr) {String str = "0123456789abcdef"; char [] hexs = hexstr.toarArray (); byte [] bytes = new byte [hexstr.length () / 2]; int n; für (int i = 0; i <bytes.length; i ++) {n = Str.Indexof (hexs [2 * i]) * 16; n + = str.sindexof (hexs [2 * i + 1]); Bytes [i] = (Byte) (N & 0xff); } return New String (Bytes); }Methode 2 der Konvertierung von Saiten in hexadezimalen Zeichenfolgen:
/ ** * HexString Convert String * @param hexString * @return String * / public static String toStringhex (String s) {byte [] Bakeyword = new byte [slength () / 2]; für (int i = 0; i <bakeyword.length; i ++) {try {Bakeyword [i] = (byte) (0xff & ganzEger.parseInt (substring (i * 2, i * 2+2), 16)); } catch (Ausnahme e) {e.printstacktrace (); }} try {s = new String (BakeyWord, "utf-8"); // utf-16le: nicht} catch (Ausnahme E1) {e1.printstacktrace (); } return s; }Der obige Artikel über die Konvertierung von Java, die Konvertierungsmethode von Byte und Hexadezimal, sind alle Inhalte, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.