int64_t 타입은 바이트오더 변환을 어떻게 하나요?

superkkt의 이미지

int32_t나 int16_t는 htonl, htons, ntohl, ntohs 함수로 바이트오더 변환을 할 수 있는데요.. int64_t 타입은 무슨 함수를 써서 변환하나요? int64_t 타입은 위에 나열된 함수로는 변환이 안되는군요.

magingax의 이미지

예전에 쓰던 코드인데..아마 될껍니다. 고쳐 쓰시길..

DWORD64 inverse64(DWORD64 s)
{
register DWORD64 rstamp = 0x0000000000000000;
rstamp |= (s & 0xff00000000000000) >> 56;
rstamp |= (s & 0x00ff000000000000) >> 40;
rstamp |= (s & 0x0000ff0000000000) >> 24;
rstamp |= (s & 0x000000ff00000000) >> 8;
rstamp |= (s & 0x00000000ff000000) << 8;
rstamp |= (s & 0x0000000000ff0000) << 24;
rstamp |= (s & 0x000000000000ff00) << 40;
rstamp |= (s & 0x00000000000000ff) << 56;
return rstamp;
}

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

aero의 이미지

http://codesearch.google.com
에서
htonll ntohll int64_t
로 검색하시면 64bit byte order 관련 코드들이 많이 나옵니다.
맘에 드는것을 골라서 가져와서 쓰시면 될듯하네요.

익명사용자의 이미지

4바이트씩 htonl.. 함수 호출해서 다시 합치면 되용....

익명사용자의 이미지

앞에 4바이트 뒤에 4바이트 위치도 바꿔주고용....

superkkt의 이미지

답변 감사합니다. 아래 코드 사용하면 되겠군요.

#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
#ifdef WORDS_BIGENDIAN
#define htonll(x)   (x)
#define ntohll(x)   (x)
#else
#define htonll(x)   ((((uint64_t)htonl(x)) << 32) + htonl(x >> 32))
#define ntohll(x)   ((((uint64_t)ntohl(x)) << 32) + ntohl(x >> 32))
#endif

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com