출처 : http://blog.naver.com/pointer98/150046033124

포맷문자열

사용해야 인자타입

실제 내부 사용 변환 타입

기본진법

정밀도

%c 

int x

(unsigned char)x 

1바이트 문자

%lc 

wint_t x

wchar_t a[2] = {x} 

2바이트 확장 문자

%d

int x

(int)x 

10 

1 

%hd 

int x

(short)x 

10 

1 

%ld 

long x

(long)x 

10 

1 

%lld 

long long int x

(long long int)x

10

1

%i 

int x

(int)x 

10 

1 

%hi 

int x

(short)x 

10 

1 

%li 

long x

(long)x 

10 

1 

%lli 

long long int x

(long long int)x

10

1

%f 

double x

(double)x 

10 

6

%Lf 

long double x

(long double)x 

10 

6 

%F

double x

(double)x 

10 

6 

%LF

long double x

(long double)x 

10 

6 

%e 

double x

(double)x 

10 

6 

%Le 

long double x

(long double)x 

10 

6 

%E 

double x

(double)x 

10 

6 

%LE 

long double x

(long double)x 

10 

6 

%g 

double x

(double)x

10 

6 

%Lg 

long double x

(long double)x 

10 

6 

%G 

double x

(double)x 

10 

6 

%LG 

long double x

(long double)x 

10 

6 

%s 

char x[]

x[0]... 

1바이트 문자열

%ls 

wchar_t x[]

x[0]... 

2바이트 확장 문자열

%p 

void *x

(void *)x 

 

%u 

int x

(unsigned int)x 

10 

1 

%hu 

int x

(unsigned short)x

10 

1 

%lu 

long x

(unsigned long)x 

10 

1 

%llu 

long long int x

(unsigned long long int)x

10

1

%o 

int x

(unsigned int)x 

8 

1 

%ho 

int x

(unsigned short)x 

8 

1 

%lo 

long x

(unsigned long)x 

8 

1 

%llo

long long int x

(unsigned long long int)x

8 

1 

%x

int x

(unsigned int)x 

16 

1 

%hx 

int x

(unsigned short)x 

16 

1 

%lx 

long x

(unsigned long)x 

16 

1 

%llx 

long long int x

(unsigned long long int)x

16 

1 

%X 

int x

(unsigned int)x 

16 

1 

%hX 

int x

(unsigned short)x 

16 

1 

%lX 

long x

(unsigned long)x 

16 

1 

%llX

long long int x

(unsigned long long int)x

16 

1 

%n 

int * x

 

 

 

%hn 

short * x

 

 

 

%ln 

long * x

 

 

 

%% 

None

'%' 

%문자

 

 

 Escape문자

 

실제 문자

Escape 문자

"

\"

"문자

'

\'

'문자

? 

\? 

?문자

\ 

\\ 

\문자

BEL

\a 

Beep

BS

\b 

Backspace: 뒤로

FF

\f 

Form feed

NL

\n 

New line: 바꿈, buffer 비움

CR

\r 

Carriage return: 라인 처음으로

HT

\t 

수평 tab

VT

\v 

수직 tab

null 

\0 

null문자

code values

\d \dd \ddd

8진수 코드값

code values

\xh \xhh

16진수 코드값

 

 

 

scanf()함수의 포맷 플래그

 

포맷문자열

사용 데이터 변수 타입

호출되는 내부 변환함수

기본진법

%c

char x[]

1바이트 문자

%lc

wchar_t x[]

2바이트 확장 문자

%d

int * x

strtol

10

%hd

short * x

strtol

10

%ld 

long * x

strtol

10 

%lld 

long long int * x

strtol

10

%i 

int * x

strtol

10 

%hi 

short * x

strtol

10 

%li 

long * x

strtol

10 

%lli 

long long int * x

strtol

10 

%f 

float * x

strtod

10 

%lf 

double * x

strtod

10 

%Lf

long double * x

strtod

10 

%F

float * x

strtod

10 

%lF

double * x

strtod

10 

%LF

long double * x

strtod

10 

%e

float * x

strtod

10 

%le

double * x

strtod

10 

%Le

long double * x

strtod

10 

%E

float * x

strtod

10 

%lE

double * x

strtod

10 

%LE

long double * x

strtod

10 

%g 

float * x

strtod

10 

%lg 

double * x

strtod

10 

%Lg

long double * x

strtod

10 

%G

float * x

strtod

10 

%lG

double * x

strtod

10 

%LG

long double * x

strtod

10 

%s 

char x[] 

1바이트 문자열

%ls 

wchar_t x[] 

2바이트 확장 문자열

%u 

unsigned int * x

strtoul

10 

%hu 

unsigned short * x

strtoul

10 

%lu 

unsigned long * x

strtoul

10 

%llu 

unsigned long long int * x

strtoul

10 

%o 

unsigned int * x

strtoul

8 

%ho 

unsigned short * x

strtoul

8 

%lo 

unsigned long * x

strtoul

8 

%llo 

unsigned long long int * x

strtoul

8

%x 

unsigned int * x

strtoul

16 

%hx 

unsigned short * x

strtoul

16 

%lx 

unsigned long * x

strtoul

16 

%llx 

unsigned long long int * x

strtoul

16 

%X

unsigned int * x

strtoul

16 

%hX

unsigned short * x

strtoul

16 

%lX

unsigned long * x

strtoul

16 

%llX 

unsigned long long int * x

strtoul

16 

%p 

void ** x

 

 

%n 

int * x

 

 

%hn 

short * x

 

 

%ln 

long * x

 

 

%[...] 

char x[] 

 

 

%l[...] 

wchar_t x[] 

 

 

%% 

None

 

 

'NativeCode > api' 카테고리의 다른 글

LoadLibrary, GetProcAddress, FreeLibrary, Name Mangling 해결  (0) 2010.11.09
IP, TCP, UDP, ICMP Checksum 계산  (0) 2010.07.05
IpHlpApi MSDN  (0) 2010.07.04
SendARP  (0) 2010.07.03
[팁] Heap 메모리 검증하기.. | VC++ 일반  (0) 2010.05.09
패킷들은 checksum 필드를 갖고 있습니다. 이 필드를 이용해 이 패킷이 정상인지 아닌지 판단할 수 있습니다.
체크섬 계산은 간단히 할 수 있습니다.

알고리즘을 먼저 소개하겠습니다.


-- Ip Header checksum 계산--
1. ip header를 2바이트씩 자른다.
2. 체크섬 바이트를 0으로 초기화 합니다.
3. 체크섬 바이트에 짤린 바이트를 그대로 계속 더해갑니다. (sum += 각 2바이트)
4. 더해지는 sum은 4바이트여야 합니다. (올림이 생기기 때문에)
5. 다 더한다음 sum(4바이트) 중 윗 부분의 2바이트를 아랫부분의 2바이트에 다시 더합니다.
6. 다시 sum(4바이트) 중 윗 부분의 2바이트를 아랫부분의 2바이트에 다시 더합니다.

이와 같이 하는 이유는 올림이 다시 생기기 때문에 2번을 한다고 합니다.

7. 이제 2바이트가 된 sum을 1의 보수로 바꾸면 됩니다.



TCP, UDP, ICMP는 한가지 과정이 더 추가됩니다. IP Header의 정보가 필요합니다.
IP 헤더의 체크섬 계산법과 마찬가지로 20바이트에 해당하는 tcp 헤더의 값을 모두 더합니다.
데이터가 존재할경우 데이터 부분까지 더해 줍니다. 데이터가 홀수로 끝나는 부분은 주의해서 더해야 합니다.
다음으로 IP Header의 srcip, dstip를 2바이트로 잘라 더해줍니다.
부가적으로 IP Header의 protocol 필드, tcp 헤더의 길이를 더해줍니다.
여기서 tcp 헤더의 길이는 데이터 부분이 존재할경우 데이터 부분까지길이를 말합니다.
이후 IP의 체크섬과 마찬가지로 위 과정에서 발생한 케리값을 더해주는 과정을 거쳐 체크섬 계산이 완성됩니다.





UDP, ICMP의 경우는 TCP 체크섬 계산과 똑같습니다.

Bloger : moltak.net

'NativeCode > api' 카테고리의 다른 글

LoadLibrary, GetProcAddress, FreeLibrary, Name Mangling 해결  (0) 2010.11.09
printf, scanf 함수 포맷 문자열  (0) 2010.07.07
IpHlpApi MSDN  (0) 2010.07.04
SendARP  (0) 2010.07.03
[팁] Heap 메모리 검증하기.. | VC++ 일반  (0) 2010.05.09
iphlpapi 라이브러리의 msdn 소스 입니다.
굉장히 좋네요. 
NIC 이름과 설명 뿐만 아니라 아이피 NDIS 버젼등등 많은 정보가 나옵니다. 





Bloger: moltak.net

'NativeCode > api' 카테고리의 다른 글

printf, scanf 함수 포맷 문자열  (0) 2010.07.07
IP, TCP, UDP, ICMP Checksum 계산  (0) 2010.07.05
SendARP  (0) 2010.07.03
[팁] Heap 메모리 검증하기.. | VC++ 일반  (0) 2010.05.09
WSAGetLastError()  (0) 2010.04.06

+ Recent posts