JavaクライアントからC++サーバーのソケット接続を介して数値データを受信しています。私が4バイトのint型のデータを受け取ったとき、必要なのはntohl()関数を使うか、ビット順を逆にしてC++ int型に変換するだけです。しかし、私は長いデータ型をJavaから変換しようとするのに問題があります。私が何を試しても、正しい値を回復できませんでした。私はLONG64、ULONG64、int64_tも使っていて、どれも働いていませんでした。私はC++でJava longをint64に変換する
size = ntohl(size)
をすれば
int64_t size;
recv(client, (char *)&size, sizeof int64_t, 0);
は、次にサイズが0どんなオリジナルのlong値になります:私は、Javaから長いS = 1を送信するときに、C++側で私がやっ例えば
、 Javaにあります!
私は、S = 1
、次いでntohl()変換、サイズ= 72057594037927936をしない場合、私はほとんどこのトピックに関する有用な情報を発見したと私はどんな提案をいただければ幸いです。
わかりやすくするために、* 64ビット*を占有する4バイトのint型データはどのアーキテクチャにありますか?最後に私はチェックしました、** 4 **バイトはほぼ常に4オクテット= ** 32 **ビットです。あなたはいつも(a)それらを 'int8_t ar [n]'に読み込み、実際にバイト数を確認して、シーケンス内のどこにあるかを確認して検証できます。 'recv'の返却結果を確認することもできませんでした。 – WhozCraig
Javaは、CやC++とは異なり、エンディアンを気にしません。それはいつもビッグエンディアンになります。それはあなたの問題の原因ではありませんか? – fge
ありがとうございます。回答でRobが述べたように、問題はntohl()関数自体にあり、32ビットデータで動作します。 –