2009-09-23 17 views
6

Javaでは、バイト(16進数など)の16進文字列表現をバイト値に変換するにはどうすればよいですか?例えば16進文字列をJavaのバイトに変換する

byte b = ConvertHexStringToByte("1e"); 
+0

をバイトにキャスト による署名/署名のない問題に、バイトにキャストする必要があります。その後、あなたの質問は何ですか?もしあれば? – EJP

+0

これは良い質問でした。なぜ閉鎖されたのですか? – Joe

答えて

15
Integer.parseInt(str, 16); 
+0

私はそれを試みましたが、それはバイトではなくintを生成します。つまり、 "1e"の場合、バイトにキャストしても、0x1eではなく30が得られます。 – phpscriptcoder

+1

byte型のときに同じように格納されている値30と0x1eのバイトを区別するにはどうすればよいですか? –

+2

@phpscriptcoder:いいえ、あなたは1eを得るでしょう。これを試してみてください:String roundtrip = Integer.toHexString(Integer.parseInt(str、16)); – erickson

12

Byte.parseByteは、文字列表現を解析することによってbyteを返します。

つバイトの16進表現を解析できるように(String, int)署名と方法を使用して、基数は、16として指定することができる。

Byte.parseByte("1e", 16); 
+7

危険!このメソッドは、負のバイト値、たとえば "AD"を解析できません。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307を参照してください。 Integer.parseInt –

+1

@Dave Lを使用する方が良いです。評価者によれば、正しくありません。問題のメソッドが指定どおりに動作しているためです。この方法では負の値はマイナス記号 " - "を使用して表示する必要があり、上位ビットを1にして符号ビットを設定しないでください。言い換えると、基数16の場合、有効な文字列の範囲は "-80"(-128)から "7f"(127)までです。 「AD」ベース16は正の値173であり、範囲外である。 – Caner

+1

@LAS_VEGAS確かにByte.parseByteは指定されたとおりに実行されますが、質問者が暗示するように、8ビット値の2文字の16進表現を対応するバイトに変換したい場合、このメソッドは(指定され実装されているように)高位ビットが1の値に対してはそうしないでください。 –

19

あなたはByte.parseByte("a", 16); を使用することができるが、これが唯一の値に対して動作します127まで、 値が高いことは、私はint型に転送することをお勧めしますし、そのように

(byte) (Integer.parseInt("ef",16) & 0xff); 
+1

:なぜ '&0xff'ですか? –

+1

&0xffは、符号なしのint値を取得するために使用されます。 – JCasso

+1

これは受け入れられる回答である必要があります!それはまさに私が必要としたものです! – VikingPingvin