Javaでバイナリシステムを変換するには多くの方法があります。その中には、2回のアルゴリズムを介して実装する必要のない、一般的な基本的なバイナリオクタル10進数六十数葉などのパッケージクラスがあります。詳細は次のとおりです。
まず、最も単純なバイナリ変換方法は次のとおりです。
小数を16進数に変換します。
string integer.tohexstring(int i)
小数をOctalに変換します
string integer.tooctalstring(int i)
小数をバイナリに変換します
string integer.tobinarystring(int i)
16進数を小数に変換します
integer.valueof( "ffff"、16).toString()//プレフィックス0xを処理できません
Octalを10進数に変換します
integer.valueof( "76"、8).toString()// prefix 0は、小数になるように処理できます。
integer.valueof( "0101"、2).toString()
2、8、16進数から小数に直接変換する方法はありますか?
java.lang.integerクラス
parseint(string s、int radix)
2番目のパラメーターで指定されたカーディナリティを使用して、文字列パラメーターを署名された整数に解析します。
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)throwsa numberformatexception
parseint( "99"、Sthrowsa Numberformatexception
parseint( "kona"、10)Sthrowsa numberformatexception
Parseint( "Kona"、27)は411787を返します
アルゴリズムなしでバイナリ変換(2、8、16)の書き方
integer.tobinarystring
integer.tooctalstring
integer.tohexstring
次に、Javaでバイトと16進数の変換を導入します
原則分析:
Javaのバイトは8ビットで構成されており、16個の16個の状態であり、24 = 16で4ビットで表されます。したがって、バイトを2つの16進数文字に変換することができます。つまり、高4桁と低4桁を対応する16進文字に変換し、これら2つの16進列文字列を組み合わせて、六分位の弦の文字列を取得します。同様に、反対の変換は2つの16進数文字を1つのバイトに変換します。
Javaでは、バイトと16進数を変換するための2つの主要なアイデアがあります。
1.バイナリバイトが16進数に変換された場合、バイトhighと0xf0の「&」操作を実行し、左を4ビットでシフトしてバイトhighの16進数を取得します。低いバイトと0x0Fの「&」操作を実行して、低桁と数字の16進数Bを取得し、2つの16進数をABの一部に組み立てます。これはバイトの16進表現です。
2。バイナリバイトからバイナリバイトまでの場合、16進数に対応する10進数を右4に移動して、バイトハイAを取得します。 「|」を行います低バイトに対応する16進数文字の10進数bとaの動作は、六分位バイナリバイト表現を取得する
変換関数の1つは次のとおりです。
/** * * @param bytes * @returnバイナリをヘキサデシマル文字出力に変換 */</span> private static string hexstr = "01234567889ABCDEF"; //グローバルpublic static string binarytohexstring(byte [] bytes){string result = "";文字列hex = ""; for(int i = 0; i <bytes.length; i ++){// bytesは4ビット高く<strong> hex = string.valueof(hexstr.charat((bytes [i]&0xf0)>> 4)); </strong> //バイトは4ビット低い<strong> hex += string.valueof(hexstr.charat(bytes [i]&0x0f)); </strong> result += hex; } return result; }/** * * @param hexString * @return hexadecimalをバイト配列に変換 */public static byte [] hexstringtobinary(string hexstring){// hexStringの長さは2で丸くなります。 byte [] bytes = new byte [len];バイトhigh = 0; low =(byte)hexstr.indexof(hexstring.charat(2*i+1));バイト[i] =(byte)(high | low); //高いステータスまたは操作}バイトを返す; }}同様の方法もあります。
<span style = "font-size:14px;">* byte []をhex stringに変換します。ここでは、BYTEをINTに変換してから、integer.tohexString(int)を使用して六角文字列に変換できます。
* @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(); } / ** * hex stringをbyte [] * @param hexstring the hex string * @return byte [] * / public static byte [] hexstringtobytes(string hexstring){if(hexstring == null || hexstring.equals( "")){return null; } hexstring = hexstring.touppercase(); int length = hexstring.length() / 2; char [] hexchars = hexstring.tochararray(); byte [] d = new byte [length]; for(int i = 0; i <length; i ++){int pos = i * 2; d [i] =(byte)(chartobyte(hexchars [pos])<< 4 | chartobyte(hexchars [pos + 1])); } return d; } / ** * charをbyteに変換 * @param c char * @return byte * / private byte chartobyte(char c){return(byte) "0123456789abcdef" .indexof(c); } </span>2つの方法は似ています。ここで注意してください
上記は、byte []を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.Javaの2部構成システムは補体を使用します
したがって、負の数が負の数である場合、負の数は自動的に1を埋め、エラーが発生します。
0xffはデフォルトでは整形手術であるため、バイトと0xffが関与すると、バイトが最初に整形手術の手術に変換されるため、結果の高24ビットは常に0でクリアされるため、結果は常に私たちが望むものです。
いくつかのオンライン要約方法があります:
文字列を16進文字列に変換する方法1:
/ *** Stringを160個の文字列に変換*/ public static string str2hexstr(string str){char [] chars = "0123456789abcdef" .tochararray(); stringbuilder sb = new StringBuilder( ""); byte [] bs = str.getBytes(); int bit; for(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(); }ヘキサデシマル文字列を配列メソッド1に変換します。
/ ** *ヘックスストリングをバイト配列に変換 * @param hexString * @return byte [] * / public static byte [] hexstringtobyte(string hex){int len =(hex.length() / 2); byte [] result = new byte [len]; char [] achar = hex.tochararray(); for(int i = 0; i <len; i ++){int pos = i * 2; result [i] =(byte)(tobyte(achar [pos]))<< 4 | tobyte(achar [pos + 1])); } return result; } private static int tobyte(char c){byte b =(byte) "0123456789abcdef" .indexof(c); bを返します。 }配列を16進文字列に変換します。メソッド1:
/ ** *配列をhex stringに変換 * @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(); }方法2バイト[]配列を160個の文字列に変換する:
/ ** *配列をhex stringに変換 * @param byte [] * @return hexstring */ public static string tohexstring1(byte [] b){stringbuffer buffer = new StringBuffer(); for(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; }}ヘキサデシマル文字列変換文字列の方法1:
/ ** *ヘックスストリングを文字列に変換 * @param hexString * @return string */ public static string hexstr2str(string hexstr){string str = "0123456789ABCDEF"; char [] hexs = hexstr.tochararray(); byte [] bytes = new byte [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] =(byte)(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(Exception e){e.printstacktrace(); }} try {s = new String(bakeyword、 "utf-8"); // utf-16le:not} catch(例外E1){e1.printstacktrace(); } return s; }Javaの変換に関する上記の記事、byteおよびhexadecimalの変換方法は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。