int64_t
UDPで2つ送信したいです。これを行うには、それらを 4 要素の配列に格納します。
- [0] - 最初の 32 を下げる
int64_t
- [1] - 最初の上位 32 ビット
int64_t
- [2] - 秒の下位 32 ビット
int64_t
- [3] - 秒の場合は上位 32 ビット
int64_t
送信するための私のコード:
int64_t from, to;
/* some logic here */
data[0] = htonl((int32_t) from);
data[1] = htonl((int32_t) (from >> 32));
data[2] = htonl((int32_t) to);
data[3] = htonl((int32_t) (to >> 32));
/* sending via UDP here */
UDP経由で受信int32_t
した後に結合するための私のコード:int64_t
data
int64_t from, to;
from = (int64_t) ntohl(data[1]);
from = (from << 32);
from = from | (int64_t) ntohl(data[0]);
to = (int64_t) ntohl(data[3]);
to = (to << 32);
to = from | (int64_t) ntohl(data[2]);
printf("received from = %" PRId64 "\n", from);
printf("received to = %" PRId64 "\n", to);
最初の数字 ( from
) は常に正しいです。しかし、2番目から得たものprintf
は正しくありません。さらに、それは最初の数に依存しているようです。例:
送信:
from
= 125,to
= 20。
受け取った:
from
= 125,to
= 125。
送信:
from
= 1252、to
= 20。
受け取った:
from
= 1252、to
= 1268。
私は何を間違っていますか?変換またはネットワーク経由での送信の問題ですか?