// htonl함수가 기본 int밖에 지원하지 않기 때문에 __int64를 지원하는 함수를 찾기 시작~
// htonll에서 나온 값만으로는 정상적으로 동작하는지 알수가 없었음.
// htonll사용해 값 변환 후 ntohll을 사용해서 원래의 값이 나오는지 확인하는 것으로 제대로 동작한다고 판단.
// 여러개의 함수를 써본 결과 아래의 것이 가장 간단하고 제대로 동작한다고 판단해서 이것으로 사용하기로 정함.
#include <stdio.h>
#include <WinSock2.h>
#define htonll(x) \
((((x) & 0xff00000000000000LL) >> 56) | \
(((x) & 0x00ff000000000000LL) >> 40) | \
(((x) & 0x0000ff0000000000LL) >> 24) | \
(((x) & 0x000000ff00000000LL) >> 8) | \
(((x) & 0x00000000ff000000LL) << 8) | \
(((x) & 0x0000000000ff0000LL) << 24) | \
(((x) & 0x000000000000ff00LL) << 40) | \
(((x) & 0x00000000000000ffLL) << 56))
#define ntohll(x) \
((((x) & 0x00000000000000FF) << 56) | \
(((x) & 0x000000000000FF00) << 40) | \
(((x) & 0x0000000000FF0000) << 24) | \
(((x) & 0x00000000FF000000) << 8) | \
(((x) & 0x000000FF00000000) >> 8) | \
(((x) & 0x0000FF0000000000) >> 24) | \
(((x) & 0x00FF000000000000) >> 40) | \
(((x) & 0xFF00000000000000) >> 56))
int main(void)
{
int big32 = 0, iVal = 121299;
__int64 big64 = 0;
printf("iVal = %d\n\n", iVal);
big32 = htonl(iVal);
printf("big32[%d]\n",big32);
big32 = ntohl(big32);
printf("big32[%d]\n",big32);
big64 = htonll(iVal);
printf("big64[%I64d]\n",big64);
big64 = ntohll(big64);
printf("big64[%I64d]\n",big64);
}
출처 :: http://blog.naver.com/PostView.nhn?blogId=nkein82&logNo=100121777432
'Research > Web' 카테고리의 다른 글
IDS 우회 참고자료 (0) | 2014.04.08 |
---|---|
snort - Packet Acquisition (0) | 2014.02.14 |
python socket관련 - socket, urllib2, httplib (0) | 2014.02.13 |
Suricata 소스 특징정리 (0) | 2014.01.13 |
[ Network ] IPv6.h // ndp.h (0) | 2013.09.10 |