我正在尝试为我的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之间的整数。
答案 0 :(得分:0)
首先,atoi
函数需要一个字符串,并且为它提供一个字节。其次,atoi
只接受数字,如果你收到的数字是非数字,那么它将返回零。
我建议你试试这个:
UDPGet(&i);
if (isdigit(i))
SetDCPWM1(255 - (i - '0'));
i - '0'
将ASCII数字转换为实际值。我添加了if
语句,以确保收到的数字确实是一个数字,否则计算错误,甚至可能最终为负数。