Javaのバイト配列型(byte[])とint型の相互変換メソッドのコード例を詳しく紹介

黄舟
リリース: 2017-03-08 10:21:53
オリジナル
1728 人が閲覧しました

以下のエディターは、Java バイト配列型 (byte[]) と int 型を変換する方法に関する記事を提供します。編集者はこれがとても良いと思ったので、参考として共有します。エディターに従って見てみましょう。コードは次のとおりです。

public class CommonUtils {
 //高位在前,低位在后
 public static byte[] int2bytes(int num){
 byte[] result = new byte[4];
 result[0] = (byte)((num >>> 24) & 0xff);//说明一
 result[1] = (byte)((num >>> 16)& 0xff );
 result[2] = (byte)((num >>> 8) & 0xff );
 result[3] = (byte)((num >>> 0) & 0xff );
 return result;
 }
 
 //高位在前,低位在后
 public static int bytes2int(byte[] bytes){
 int result = 0;
 if(bytes.length == 4){
  int a = (bytes[0] & 0xff) << 24;//说明二
  int b = (bytes[1] & 0xff) << 16;
  int c = (bytes[2] & 0xff) << 8;
  int d = (bytes[3] & 0xff);
  result = a | b | c | d;
 }
 return result;
 }
 
 public static void main(String[] args){
 int a = -64;
 System.out.println("-64="+Integer.toBinaryString(-64));
 byte[] bytes = CommonUtils.int2bytes(a);
 for(int i = 0 ; i<4 ; i++){
  System.out.println(bytes[i]);
 }
 a = CommonUtils.bytes2int(bytes);
 System.out.println(a);
 
 }
}
ログイン後にコピー


実行結果は次のとおりです。

-64=11111111111111111111111111000000
-1
-1
-1
-64
-64
ログイン後にコピー


1:

-64は[10000000][00000000][00000000][01000000]としてバイナリの元のコードに変換されます元のコードを[11111111][11111111][11111111][11000000]として補数コードに変換しますそれはコンソールの出力結果と同じです。 java では、バイナリが 2 の補数形式で表現されていることがわかります

-64 >>> 24 (符号なし右シフト、上位ビットは 0 で埋められます) 以降は、 [ になります。 00000000][00000000][00000000][ 11111111]

前のステップの結果に 0xff を追加しても、0xff の値は [00000000] なので、[00000000][00000000][00000000][11111111] となります。 ][00000000] [00000000][11111111], so & 0xff の目的は、下位 8 ビットを変更せずに保持し、残りの位置を 0

にし、結果を強制的にバイト型に変換し、下位ビットを保持することです。上位ビットを切り捨てて、[11111111] になることがわかります。前のステップの 0xff は、実際には必要ありません。ビットがどんなに上位であっても、最終的には切り捨てられます

ので、result[0] is [11111111]=-1 など:

result[1]为[11111111]=-1
result[2]为[11111111]=-1
result[3]为[11000000]=-64
ログイン後にコピー

説明 2:

byte[0] は [11111111] で、最初に byte[0] が int 型に変換されます (

Before)ディスプレイスメント演算では、byte 型が int 型に変換されます。正の数の場合は上位ビットに 0 が埋められ、負の数の場合は上位ビットに 1 が埋められます

)、加算します。上位ビットに 1 を設定すると、[11111111][11111111][11111111][11111111]になります前のステップの結果と 0xff の後は、[00000000][00000000][00000000][11111111]になります

それでは前のステップの結果は << 24 (左シフト、0 による下位パディング) となり、これは [11111111][00000000][00000000][00000000] = a

同様に、b、 c, d

a | b | c | d は、バイトを int に変換するときに、パディングが a | b | c | d に影響を与えないことがわかります。 0に設定)、

& 0xffが必要です

shortとbyte[]の間の変換、longとbyte[]の間の変換も同様です

追記:

1、int型は4を占めますバイト型は 1 バイトのみを占有します

2、元のコード: 最上位ビットは符号ビットで、残りのビットは数値サイズを表すために使用されます。

2 の元のコードは次のとおりです: 00000010

- 2. 元のコード: 100000103、補数コード: 正の数 補数コードは元のコードと同じです。

負の数の補数コードの符号ビットは変更されず、残りのビットはそのままです。ビットごとに反転された

2 の補数コード: 00000010

-2 の補数コード: 111111014 、補数: 正の数の補数は元のコードと同じです。負の数は負の数の補数 + 1

2の補数: 00000010

-2の補数: 11111110

以上がJavaの詳しい入門書です バイト配列型(byte[ ]) と int 型の詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!