送信 C 側
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
Java 側では、ネットワーク データを char[8] に読み込みます。
double への変換を実行する適切な方法は何ですか? 単に文字列を送信し、それを解析して double に戻す方法はありますか?
送信 C 側
double tmp = htonl(anydouble);
send(socket, (char *) &tmp, sizeof(tmp), 0);
Java 側では、ネットワーク データを char[8] に読み込みます。
double への変換を実行する適切な方法は何ですか? 単に文字列を送信し、それを解析して double に戻す方法はありますか?
これはうまくいくはずです。
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 Protocol Buffers を使用することをお勧めします。効率的で堅牢で、エンディアンなどを処理します。
String
オーバーヘッドは必要ありません。バイトをlong
最初に組み立ててから、 Double の 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"