在C中将字符从串口转换为int

时间:2016-07-21 03:05:32

标签: c xbee

我正在使用此源代码从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);
}

0 个答案:

没有答案