2012-03-22 2 views
0

PIC 장치에 대한 통신을 만들고 UDP를 사용하고 있습니다. 'R'또는 다른 문자와 같은 문자 하나를 보내면 소켓으로 보낼 수 있습니다. 코드는 그것을 이해하고 모든 것은 정상적으로 작동하지만, 정수를 보내려고 할 때 작동하지 않습니다.UDPGet에서 정수 값으로 작업하기

static UDP_SOCKET MySocket; 
BYTE    i; 

이 작동 :

if(!UDPIsGetReady(MySocket)) 
      return; 

    UDPGet(&i); 
if(i == 'R') SetDCPWM1(255); 

UDPGet(&i); 
if(i == 'G') SetDCPWM1(155); 

이 코드가 작동하지 않습니다

UDPGet(&i); 
    SetDCPWM1(255-atoi(i)); 

그것은 컴파일, 그것은, 그냥 나던 작품 충돌 나던. 문제는 문자 (문자)를 보내고받을 수 있지만 정수로 동일한 작업을 수행 할 수 없습니다. 내가 'R'을 보내고받을 수는 있지만 '1'또는 '20'을 보낼 수는 없지만 실제로는 0에서 255 사이의 정수를 보내려고합니다.

+0

"작동하지 않는다"는 것을 의미합니까? 컴파일되지 않습니까? 그것은 추락합니까? 예상치 못한 결과가 나옵니까? – cnicutar

+0

'(i == 'R')'당신이'255'를 보내고'G'라면'155'를 보냅니다. 여기에는 예측 가능한 매핑이 없습니다. 따라서 모든 if 문을 단일 SetDCPWM1 (255-atoi (i))으로 바꿀 수는 없습니다. –

+0

인기있는 thrird party 라이브러리에서 언급 한 기능을 찾을 수 없으며 이는 자신의 기능임을 나타냅니다. 우리가 더 문제 – Attila

답변

0

먼저 atoi 함수는 문자열을 원하지만, 그리고 당신은 그것에게 1 바이트를 공급하고있다. 둘째, atoi은 숫자 만 허용합니다.받은 값이 숫자가 아닌 경우 0을 반환합니다.

내가 대신이 시도 제안 :

UDPGet(&i); 
if (isdigit(i)) 
    SetDCPWM1(255 - (i - '0')); 

i - '0'는 실제 값으로 ASCII 숫자로 변환합니다. 나는 if 진술을 추가하여 수신 된 숫자가 실제로 숫자가되도록했습니다. 그렇지 않으면 계산이 잘못되어 음수로 끝날 수도 있습니다.

+0

감사합니다. 지금 당장 시도하고 있습니다. –

+0

그것은 좋은 생각 인 것 같지만 나는 UDPGet (&i);)에서 1 바이트 만받을 수 있다고 생각합니다. 255로 255의 정수 값은 1 바이트가 될 것입니다. –

+0

@HorheGarcia'i'는 1 바이트이며, 그리고 그것은 isdigit이 기대하는 것이며 atoi는 그렇지 않습니다.또한 계산은 단일 바이트를 산출합니다. –

관련 문제