我正在尝试为我的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
语句以确保接收到的数字确实是一个数字,否则计算将是错误的,甚至可能以负数结尾。