1

そのうちの1つは整数をバイト配列に変換し、もう1つはバイト配列を整数に変換する2つのメソッドがあります。しかし、どちらもバイト配列の長さを 4 未満に定義すると、例外が発生します。両方の方法を修正するにはどうすればよいですか。

public class Test {

public Test() {

}

public static int getIntegerFromByte(byte[] byteArr) {

        return (byteArr[0] ) << 24 | (byteArr[1] & 0xFF) << 16 | (byteArr[2] & 0xFF) << 8 | (byteArr[3] & 0xFF);

}

public byte[] getByteArrayFromInteger(int intValue ,int byteArrSize) {


            ByteBuffer wrapped = ByteBuffer.allocate(byteArrSize);
            wrapped.putInt(intValue);
            byte[] byteArray = wrapped.array();
            return byteArray;

}

public static void main (String []args) throws IOException {

    Test app = new Test();

    byte [] b = app.getByteArrayFromInteger(1, 3);
    System.out.println("Length of Byte:\t"+ b.length+ "\n Value: \t"+ getIntegerFromByte(b));
    byte [] byteArr = new byte[3];
    byteArr[0] = 0;
    byteArr[1] = 0;
    byteArr[2] = 1;

    System.out.println("Length of Byte:\t"+ byteArr.length+ "\n Value: \t"+ getIntegerFromByte(byteArr));

}

}

ありがとう

4

6 に答える 6

0

このようにしてみてください:-

byte [] b = app.getByteArrayFromInteger(0, 3);
于 2013-10-21T12:42:02.407 に答える
0

これは、変換に長さ 4 のバイト配列を使用しているという事実によるものです。サイズを小さくすると、範囲外に関連する例外が発生します....

于 2013-10-21T12:40:11.883 に答える
0

の既存の機能をより効率的に使用できBigIntegerます。これはすべて既に行われているためです。

public void test() {
  System.out.println("Hello");
  int i = 1234567;
  byte[] ba = BigInteger.valueOf(i).toByteArray();
  int j = new BigInteger(ba).intValue();
  System.out.println("i="+i+" ba="+Arrays.toString(ba)+" j="+j);
}

版画

i=1234567 ba=[18, -42, -121] j=1234567
于 2013-10-21T13:48:46.450 に答える