문제

8 바이트 배열이 있고 해당 숫자 값으로 변환하고 싶습니다.

예를 들어

byte[] by = new byte[8];  // the byte array is stored in 'by'

// CONVERSION OPERATION
// return the numeric value

위의 변환 작업을 수행하는 메소드를 원합니다.

도움이 되었습니까?

해결책

첫 번째 바이트가 가장 중요한 바이트라고 가정합니다.

long value = 0;
for (int i = 0; i < by.length; i++)
{
   value += ((long) by[i] & 0xffL) << (8 * i);
}

첫 번째 바이트는 가장 중요한 것이고 약간 다릅니다.

long value = 0;
for (int i = 0; i < by.length; i++)
{
   value = (value << 8) + (by[i] & 0xff);
}

오래 교체하십시오 Biginteger, 8 바이트 이상이있는 경우.

오류 수정에 대한 Aaron Digulla에게 감사드립니다.

다른 팁

하나는 사용할 수 있습니다 BufferS의 일부로 제공되는 S java.nio 변환을 수행하기위한 패키지.

여기, 출처 byte[] 배열은 길이 8을 가지고 있으며, 이는 크기입니다. long 값.

먼저 byte[] 배열은 a ByteBuffer, 그리고 그 다음 ByteBuffer.getLong 방법을 얻기 위해 방법이 호출됩니다 long 값:

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();

System.out.println(l);

결과

4

DFA에 감사하고 싶습니다 ByteBuffer.getLong 주석의 방법.


이 상황에서는 적용 할 수 없지만 Buffers는 여러 값이있는 배열을보고 있습니다.

예를 들어, 8 바이트 배열이있는 경우 두 개로보고 싶었습니다. int 값, 우리는 랩을 할 수 있습니다 byte[] AN의 배열 ByteBuffer,, 이것은 a로 간주됩니다 IntBuffer 그리고 값을 얻으십시오 IntBuffer.get:

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 1, 0, 0, 0, 4});
IntBuffer ib = bb.asIntBuffer();
int i0 = ib.get(0);
int i1 = ib.get(1);

System.out.println(i0);
System.out.println(i1);

결과:

1
4

이것이 8 바이트 숫자 값이라면 다음을 시도 할 수 있습니다.

BigInteger n = new BigInteger(byteArray);

이것이 UTF-8 문자 버퍼 인 경우 시도 할 수 있습니다.

BigInteger n = new BigInteger(new String(byteArray, "UTF-8"));

간단히 말해서 사용하거나 참조 할 수 있습니다 구아바 Google이 제공하는 LIB는 Long과 Byte 배열 사이의 변환 방법을 제공합니다. 내 클라이언트 코드 :

    long content = 212000607777l;
    byte[] numberByte = Longs.toByteArray(content);
    logger.info(Longs.fromByteArray(numberByte));

가변 길이 바이트에 BigInteger를 사용할 수도 있습니다. 당신은 그것을 길고 정수 또는 짧은 것으로 변환 할 수 있으며, 당신의 요구에 맞는 어느 쪽이든 갈 수 있습니다.

new BigInteger(bytes).intValue();

또는 극성을 나타내려면 :

new BigInteger(1, bytes).intValue();

배열의 모든 원시 유형에 대한 Java 변환기 코드를 완료합니다.http://www.daniweb.com/code/snippet216874.html

어레이의 각 셀은 서명되지 않은 int로 처리됩니다.

private int unsignedIntFromByteArray(byte[] bytes) {
int res = 0;
if (bytes == null)
    return res;


for (int i=0;i<bytes.length;i++){
    res = res | ((bytes[i] & 0xff) << i*8);
}
return res;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top