0

重複の可能性:
Java整数からバイト配列

以下のオリジナルにまだ関連する別の質問があります:

整数として保存された4文字(2バイト)を占める16進数がある場合。例:

int value = 0xFFFF;

これはJavaで、2バイトが完全に空の4バイトの16進数になります。

データのある2バイトだけを取得するにはどうすればよいですか?

ヘルプは大歓迎です!:)

私の2番目の質問への回答:

md_5によって以下に投稿されたより良い答え。

したがって、データを含むSINGLEバイトを取得するには、次のようにするだけです。byte single =(byte)i&0xFF 65535(0xFFFF)までの大きな数値がある場合は、次のように実行できます。

byte b1 = (byte) ((i >> 8) & 0xFF); 
byte b2 = (byte) i & 0xFF 

整数範囲にさらに大きな数値がある場合は、b1 = i >> 24、b2 = i >> 16などを実行します。シフトから8を引くと、バイトのサイズになります。

別の方法では、元の質問に対する回答を使用します。

int hex = 0xF15E;
byte[] bytes = ByteBuffer.allocate(4).putInt(hex).array();
for(int i = 0; i < 4; i++) {
    System.out.format("0x%X ", bytes[i]);
}

出力:

0x0 0x0 0xF1 0x5E

したがって、重要なバイトを取得します。

byte[] importantBytes = {bytes[2], bytes[3]};

元の質問:

この質問は、整数をbyte []に​​変換できるため、廃止されている可能性がありますが、次のようになります。

整数を先行ゼロを持つ16進数に変換するにはどうすればよいですか?

したがって、整数4096の場合、16進数では00001000になります。

全体的な目的は、このフォーマットされた16進文字列をbyte []に​​変換することでした(これは保存されます)が、上記の方法でこれを実行できると思います。

しかし、それでも...この整数をフォーマットされた16進文字列に変換するにはどうすればよいですか?これも実用的ですか?

好みの言語はJavaで、私はInteger.toHexString()を見ました。

私が最初に必要としていたもののための実用的な解決策:

int value = 2147483647;
byte[] bytes = ByteBuffer.allocate(4).putInt(value).array();

for(int i = 0; i < 4; i++)
System.out.format("0x%X ", bytes[i]);
4

2 に答える 2

2

Formatter、または次のような便利なラッパーの1つを使用してみてくださいString.format

String str = String.format("%08x", val);

これはあなたに与えるStringでしょう、しかし私はそれをあなたに任せますbyte[]...

于 2013-01-12T21:20:25.527 に答える
1

あなたの新しい質問(データを含むバイトを取得する)に関して、あなたはそれが2バイトを占めると言うのは間違っています、0xFFは実際には1バイトに詰めることができます。ロング/ダブル-8バイト整数/フロート-4バイトショート-2バイトバイト-1バイト

したがって、データを含むSINGLEバイトを取得するには、次のようにするだけです byte single = (byte) i & 0xFF 。65535(0xFFFF)までの大きな数値がある場合は、次のことができます。 byte b1 = (byte) ((i >> 8) & 0xFF); byte b2 = (byte) i & 0xFF 整数範囲にさらに大きな数値がある場合は、b1 = i>>24を実行します。 、b2 = i >> 16など。シフトから8を引くと、バイトのサイズになります。

これがあなたの質問に答えることを願っています。

于 2013-01-13T03:58:58.413 に答える