我正在使用此源代码从linux机器的串口读取。我能够从端口读取,但所有的值都是ascii乱码(我正在读取来自xbox控制器的输入)。我知道我正在发送它,即我可以在我身边看到我发送-128-127作为char,但是当我在我的linux机器上使用atoi转换它返回0时,或者当我尝试转换数据时to int它返回-48,相当于ascii中的0。
我有办法将传入的ascii转换为可读的整数,如64或-114吗?感谢您的帮助,谢谢。
#include <stdlib.h>
#include <stdio.h>
#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif
#include "rs232.h"
int main()
{
int i, n,
cport_nr=0, /* /dev/ttyS0 (COM1 on windows) */
bdrate=9600; /* 9600 baud */
unsigned char buf[4096];
char mode[]={'8','N','1',0};
if(RS232_OpenComport(cport_nr, bdrate, mode))
{
printf("Can not open comport\n");
return(0);
}
while(1)
{
n = RS232_PollComport(cport_nr, buf, 4095);
if(n > 0)
{
buf[n] = 0; /* always put a "null" at the end of a string! */
for(i=0; i < n; i++)
{
if(buf[i] < 32) /* replace unreadable control-codes by dots */
{
buf[i] = '.';
}
}
printf("received %i bytes: %s\n", n, (char *)buf);
}
#ifdef _WIN32
Sleep(100);
#else
usleep(100000); /* sleep for 100 milliSeconds */
#endif
}
return(0);
}