2013-02-15 2 views

답변

1

내가 구글 프로토콜 버퍼를 사용하는 조언을 것입니다 : https://developers.google.com/protocol-buffers/docs/overview 그것은 예를 파이썬에 대한 같은 C와 자바에 대한 libs와 많은 다른 언어를 가지고있는 나중에 유용 할 수 있습니다. 효율적이고 견고하며 엔디안 니스 등을 처리합니다.

3

이렇게하면됩니다. 바이트와 ​​

char[] sentDouble = readBytes(); // get your bytes char[8] 
String asString = new String(sentDouble); // make a string out of it 
double myDouble = Double.parseDouble(asString); // parse it into a double 

[] 당신은 할 수

import java.nio.ByteBuffer; 

public static double toDouble(byte[] bytes) { 
    return ByteBuffer.wrap(bytes).getDouble(); 
} 
+0

이것은 분명히 의사 코드입니다 . 나는'readbytes()'메소드를 가지고 있지 않다. 'Doube.parseDouble()'예외를 던집니다. –

+0

사람이 읽을 수있는 형식으로 double을 문자열로 보냈지 만 "일반"64Bit을 보내지 않으면이 코드가 작동합니다. – Simbi

+0

Double은 8 바이트이므로 바이트 [8] 또는 char [4]가 필요합니다. 바이트 [8]을 사용하면 내가 편집 한 내용을 사용할 수 있습니다. –

0

오버 헤드가 필요하지 않습니다. 먼저 long에 바이트를 모은 다음 Double's static longBitsToDouble 메소드를 사용하십시오.

// The bit pattern for the double "1.0", assuming most signficant bit first in array. 
char[] charArray = new char[] {0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
long bytesAsLong = 0L; 
for (int i = 0; i < 8; i++) 
{ 
    bytesAsLong |= ((long) charArray[i] << (56 - 8*i)); 
} 
double value = Double.longBitsToDouble(bytesAsLong); 
System.out.println(value); // prints "1.0" 
1

이중을 긴 것으로 해석하고 있습니다. 이것은 휴대 할 수 없습니다. 다음은 몇 가지 대안입니다.

  • 정말 부동 소수점 값을 사용해야합니까? 값을 정수로 나타낼 수 있습니까 (예 : 초 단위가 아닌 밀리 초)?
  • 인코딩은
  • 추출물 가수와 frexp와 함께 지수입니다 및 Double.longBitsToDouble와 자바로 다시 변환 한 후, 정수로 보내는 문자열로 두 배 (예 : sprintf를 사용해 Double.parseDouble)는