- PR -

byte配列にint型変数を変換して16進数で格納する方法

投稿者投稿内容
村岡隆
会議室デビュー日: 2009/02/01
投稿数: 5
お住まい・勤務地: 浦安
投稿日時: 2009-02-09 12:34
byte b = (byte) 0xFF;

上記のようなbyteプリミティブ変数にint型を
16進数で格納したいです。

int i= 255
b = (byte) ?;

?の部分が知りたいです。

基本的なことですいませんが、よろしくお願いします。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-02-09 12:41
8進数・10進数・16進数の何れかで値を設定しても内部保持は10進数(あるいは2進数)に変換されます。

System.out.println(0xFF)など実行すればすぐわかると思いますが。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-09 12:58
プリミティブ型をオブジェクト操作する場合、
対応するクラスを使用します。

intの場合はIntegerクラスについて調べてみてください。

村岡隆
会議室デビュー日: 2009/02/01
投稿数: 5
お住まい・勤務地: 浦安
投稿日時: 2009-02-09 13:06
>朝日奈 ありすさん

返答ありがとうございます。
下記@のメソッドの動きがいまいちわからなくて、
直接的ではないのですが、質問しました。

@Byte.valueOf(String s, int radix)
→第一引数の数値を基数(16進数)にしてbyte型として返却

と思っていました。だからAやBみたいなこともできると
思って試していたところです。

byte b = Byte.valueOf(Integer.toHexString(i),16);
byte b = Byte.valueOf(Integer.toString(i),16);

Byte.valueOf("255",16);
→これでNumberFormatExceptionなんですね。


mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2009-02-09 13:25
>byte b = (byte) 0xFF;

これで入るのは単なる-1という数字です。

System.out.println(b);

で確認してください。
16進数というのは、ソース上だけの話です。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-09 13:37
勘違いしてました、すみません。

byte b = new Integer(0xFF).byteValue();

とかやりたいのかと思ってました。

# これも byte b = (byte)0xFF; でいいし。

[ メッセージ編集済み 編集者: デューン 編集日時 2009-02-09 13:46 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2009-02-09 16:25
>上記のようなbyteプリミティブ変数にint型を
>16進数で格納したいです。

誤解がありませんか?
何進数で表現するか、というのは人間の都合です。
出力時に指定すればいいのであって、格納時にはどうでもいいことです。

>byte b = Byte.valueOf(Integer.toHexString(i),16);
>byte b = Byte.valueOf(Integer.toString(i),16);

byte型というのは、「1バイトで表現できる範囲の数値を格納する」ための変数です。
16進数表記なんぞ全然関係ないですよ。

>Byte.valueOf("255",16);
>→これでNumberFormatExceptionなんですね。

byte型に格納できる値の範囲を確認しましょう。

<追記>
それと、「二の補数」についても調べてみましょう。

[ メッセージ編集済み 編集者: Edosson 編集日時 2009-02-09 16:43 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-09 16:52
ところで、スレッドタイトルにある「byte配列」と質問との関係は?

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