【发布时间】:2016-03-23 16:27:26
【问题描述】:
在 C 中,我使用的是串行库中的这种方法:
int serialport_read_until(int fd, char* buf, char until, int buf_max, int timeout)
{
char b[1]; // read expects an array, so we give it a 1-byte array
int i=0;
do {
int n = read(fd, b, 1); // read a char at a time
if( n==-1) return -1; // couldn't read
if( n==0 ) {
usleep( 1 * 1000 ); // wait 1 msec try again
timeout--;
if( timeout==0 ) return -2;
continue;
}
#ifdef SERIALPORTDEBUG
printf("serialport_read_until: i=%d, n=%d b='%c'\n",i,n,b[0]); // debug
#endif
buf[i] = b[0];
i++;
} while( b[0] != until && i < buf_max && timeout>0 );
buf[i] = 0; // null terminate the string
return 0;
}
它要读取的字符串是这样的: "111\r\n"(后面有一个回车+换行)
它正在使用 Arduino 打印出来
serial.print("1");
serial.print("1");
serial.println("1");
使用 serialport_read_until 方法(char until is '\r\n'),我想确保正确读取整个缓冲区。
下面的char* buf到底是什么样子的?
1) 111\r\n
2) 111\r\n\0
3) 111\0
4) 111
在我使用 sscanf 方法将字符串正确转换为整数之前,我需要弄清楚这部分,但我不确定该使用哪个:
sscanf(buf, "%d\r\n", &num); 或 sscanf(buf, "%d", &num);
另外,我应该将倒数第二行:buf[i] = 0; 改为 buf[i-1] = 0; 吗?
【问题讨论】:
-
嗯,意大利面!谁写了图书馆,某个面食厨师?