发送C端
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
在 Java 方面,我将网络数据读入 char[8]
执行转换回双倍的正确方法是什么?是否可以简单地发送一个字符串并将其解析回双倍?
发送C端
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
在 Java 方面,我将网络数据读入 char[8]
执行转换回双倍的正确方法是什么?是否可以简单地发送一个字符串并将其解析回双倍?
这应该有效。
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
使用 byte[] 你可以做
import java.nio.ByteBuffer;
public static double toDouble(byte[] bytes) {
return ByteBuffer.wrap(bytes).getDouble();
}
我建议使用 Google 协议缓冲区:https ://developers.google.com/protocol-buffers/docs/overview它具有 C 和 Java 以及许多其他语言的库,例如 Python,稍后您可能会发现它们很有用。它高效、健壮、会处理字节顺序等。
您正在将 double 重新解释为 long。这不会是便携式的。以下是一些替代方案:
不需要String
开销。将字节组装成long
第一个,然后使用Double 的静态 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"