在UDPGet中使用整数值

时间:2012-03-22 10:59:30

标签: c embedded char

我正在尝试为我的PIC设备进行一些通信,并使用UDP。 当我发送一个像'R'或其他任何字符的字符时,我可以向socket发送任何内容。代码理解它,一切正常,但是当我试图发送整数时,它不起作用。

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之间的整数。

1 个答案:

答案 0 :(得分:0)

首先,atoi函数需要一个字符串,并且为它提供一个字节。其次,atoi只接受数字,如果你收到的数字是非数字,那么它将返回零。

我建议你试试这个:

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

i - '0'将ASCII数字转换为实际值。我添加了if语句,以确保收到的数字确实是一个数字,否则计算错误,甚至可能最终为负数。