자바 측 송신 C 측하나의 시스템에서 다른 발신자를 배가 ++ C 보내는 방법 윈속 수신기 : 숯불에 네트워크 데이터를 판독하는 자바
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
, 메신저 [8]
이중으로 변환을 수행하는 올바른 방법은 무엇입니까? 단순히 문자열을 보내고 다시 구문 분석하여 문자열로 변환하는 방법입니까?
자바 측 송신 C 측하나의 시스템에서 다른 발신자를 배가 ++ C 보내는 방법 윈속 수신기 : 숯불에 네트워크 데이터를 판독하는 자바
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
, 메신저 [8]
이중으로 변환을 수행하는 올바른 방법은 무엇입니까? 단순히 문자열을 보내고 다시 구문 분석하여 문자열로 변환하는 방법입니까?
내가 구글 프로토콜 버퍼를 사용하는 조언을 것입니다 : https://developers.google.com/protocol-buffers/docs/overview 그것은 예를 파이썬에 대한 같은 C와 자바에 대한 libs와 많은 다른 언어를 가지고있는 나중에 유용 할 수 있습니다. 효율적이고 견고하며 엔디안 니스 등을 처리합니다.
이렇게하면됩니다. 바이트와
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();
}
오버 헤드가 필요하지 않습니다. 먼저 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"
이중을 긴 것으로 해석하고 있습니다. 이것은 휴대 할 수 없습니다. 다음은 몇 가지 대안입니다.
이것은 분명히 의사 코드입니다 . 나는'readbytes()'메소드를 가지고 있지 않다. 'Doube.parseDouble()'예외를 던집니다. –
사람이 읽을 수있는 형식으로 double을 문자열로 보냈지 만 "일반"64Bit을 보내지 않으면이 코드가 작동합니다. – Simbi
Double은 8 바이트이므로 바이트 [8] 또는 char [4]가 필요합니다. 바이트 [8]을 사용하면 내가 편집 한 내용을 사용할 수 있습니다. –