Profile

THINK. CREATE. SOLVE.

JasonRecord

[TCP/IP] 소켓 정수 전송

정말 간단하던걸 까먹고 있었다..

그것도 모르고 char에서 아스키코드값을 빼서 int형으로 알아먹게 코드를 짜고 있었다.

얼마나 어리석었는지

 

char -> int로 바꿀 때

atoi(const char* _String)함수를 사용하면 된다.

바꾸고싶은 문자열을 인자로 전달하면 된다.

1
2
3
int integer;
char alpha[10] = "example";
integer = atoi(alpha);
cs

 

int -> char로 바꿀 때

itoa(itoa(int _Value, char * _Buffer, int _Radix)함수를 사용한다.

_Value - 바꾸고 싶은 정수를 넣는다.

_Buffer - 정수를 저장할 버퍼

_Radix - 몇 진수 형태로 저장할지 지정한다

2를 넣으면 2진수로, 10을 넣으면 10진수로 저장된다.

1
2
3
int answer = 1;
char buf[BUFSIZE + 1];
_itoa(answer, buf, 10);
cs

 

아래는 직접 써먹은 코드 부분

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//클라이언트
scanf("%d"&answer);
_itoa(answer, buf, 10);
 
retval = send(sock, buf,
                    strlen(buf), 0);
if (retval == SOCKET_ERROR)
{
    err_display("send()");
    break;
}
 
//서버
retval = recv(client_sock, buf, BUFSIZE, 0);
if (retval == SOCKET_ERROR)
{
    err_display("recv()");
    break;
}
else if (retval == 0)
    break;
 
buf[retval] = '\0';
answer = atoi(buf);
 
printf("Answer: %d\n", answer);
cs

 

 

아토이, 이토아 헷갈릴 때에는

int to alpha (itoa)

alpha to int (atoi)

이렇게 기억하도록 하자