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

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

最佳答案

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

我建议你试试这个:

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


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

09-06 08:39