- PR -

byte配列からの16進数出力

1
投稿者投稿内容
Arrow
会議室デビュー日: 2003/09/30
投稿数: 1
投稿日時: 2003-09-30 10:14
byte配列の中身を16進数でStringへ出力したいのですがその方法がわかりません。
例えば
byte[] b = {"0x95","0x96"};
と値の入ったBYTE配列から Byte.toStringを使って
それぞれの値を取り出した場合 
-107,-106となってしまいます。
これを "95","96"もしくは"0x95","0x96"のように取り出すには
どうすればいいのでしょうか?

よろしくお願いいたします。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-09-30 10:39
引用:

Arrowさんの書き込み (2003-09-30 10:14) より:
byte配列の中身を16進数でStringへ出力したいのですがその方法がわかりません。
例えば
byte[] b = {"0x95","0x96"};
と値の入ったBYTE配列から Byte.toStringを使って
それぞれの値を取り出した場合 
-107,-106となってしまいます。
これを "95","96"もしくは"0x95","0x96"のように取り出すには
どうすればいいのでしょうか?

よろしくお願いいたします。


 下記のように、java.lang.Integr#toHexString(int)を使用するだけですね。

//ByteTest.java
public class ByteTest{

public static void main(String args[]){
byte[] b = {(byte)0x95,(byte)0x96};

for(int i=0;i<b.length;i++)
System.out.println(Integer.toHexString(b[i]));
}

}

//実行結果
C:\java>java ByteTest
ffffff95
ffffff96
R-55
常連さん
会議室デビュー日: 2003/03/13
投稿数: 29
投稿日時: 2003-09-30 13:57
byte型の上限である127を超えているため負の値となってます。

>System.out.println(Integer.toHexString(b[i]));

ここは

System.out.println(Integer.toHexString(b[i] & 0xff));

このようにして正の値に直しておくのがお望みの挙動かと思われます。
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2008-04-24 14:49
検索してここにたどりついたのですが、Java5以降で良い方法があったので書いておきます。
※ゼロ埋めもします。

System.out.printf("%02x", b[i]);
System.out.print(String.format("%02x", b[i]));
1

スキルアップ/キャリアアップ(JOB@IT)