UDP를 통해 두 개의 int64_t
을 보내고 싶습니다. 이를 위해 I는 4 소자 어레이에 저장 여기서int64_t를 두 개의 int32_t로 나누고 네트워크를 통해 보내는 방법은 무엇입니까?
- [0] - (32 개)는 하부 제
int64_t
- [1] - 제
int64_t
- 높은 32 비트 [ 2 - 낮은 32 비트 번째
int64_t
- [3] - 상위 32 개 비트를 보내는 경우 제
int64_t
내 코드 :
,536 UDP를 통해data
을받은 후
int64_t
다시
int32_t
을 결합하기위한 91,363,210
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 */
내 코드 :
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
)이 항상 정확합니다. 그러나 두 번째에서 얻은 내용은 printf
입니다. 더 중요한 것은 첫 번째 숫자에 의존하는 것 같습니다. 예 :
가 전송, 수신
from
= 125to
= 20
:
from
= 125to
= 125
송신 :
= 1,252from
,to
= 20
받은 :
= 1,252from
,to
= 1268.
내가 뭘 잘못하고 있니? 전환 또는 네트워크를 통한 전송의 문제입니까?
잘 모르겠지만 서명 된 숫자가 아닌 서명 된 숫자로 이런 종류의 작업을 수행 할 수 있습니까? 예 : '(int32_t) from'은 서명 된 오버 플로우입니다. 맞습니까? 그 특이한 행동이나 그렇지 않은가요? http://en.wikipedia.org/wiki/Integer_overflow "C 프로그래밍 언어에서 부호있는 정수 오버플로로 인해 정의되지 않은 동작이 발생 함" – thejh