我只使用写函数通过串口传输数据。出于某种原因,当我接收回此数据时\r(0x0d)将转换为\n(0x0a)。这可能是由于我在打开端口时使用了termios选项,但我不知道我可以改变什么。
对于一些额外的上下文:我使用2个arduinos通过串行端口传输数据,RX0连接到TX0,TX0连接到RX0。我也在短路。基本上,我使用arduinos来分离TX和RX信号,我并没有真正使用真正的arduino芯片或任何东西。
我正在为接收缓冲区和传输缓冲区分配适当的内存
#include <termios.h>
#include <fcntl.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
int serialport_init(const char* serialport, int baud) {
struct termios toptions;
int fd;
fd = open(serialport, O_RDWR | O_NONBLOCK);
if (fd == -1) {
return -1;
}
if (tcgetattr(fd, &toptions) < 0) {
return -1;
}
speed_t brate = baud;
brate = B115200;
cfsetispeed(&toptions, brate);
cfsetospeed(&toptions, brate);
// 8N1 - * bits no parity
toptions.c_cflag &= ~PARENB;
toptions.c_cflag &= ~CSTOPB;
toptions.c_cflag &= ~CSIZE;
toptions.c_cflag |= CS8;
toptions.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
toptions.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl
toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw
toptions.c_oflag &= ~OPOST; // make raw
toptions.c_cc[VMIN] = 0;
toptions.c_cc[VTIME] = 0;
tcsetattr(fd, TCSANOW, &toptions);
if (tcsetattr(fd, TCSAFLUSH, &toptions) < 0) {
return -1;
}
return fd;
}
int serialport_write_bytes(int fd, const uint8_t* bytes, size_t n_bytes) {
ssize_t n;
size_t bytes_written = 0;
while (bytes_written < (size_t)n_bytes) {
n = write(fd, &bytes[bytes_written], n_bytes - bytes_written);
if (n == -1) continue;
if (n == 0) {
continue;
}
bytes_written += n;
printf("wrote total of: %ld bytes n=%ld\n", bytes_written, n);
tcflush(fd, TCIOFLUSH); // Flush port - same result if not used
usleep(10 * 1000); // wait 1 msec try again. Maybe can remove
}
printf("Total bytes written: %ld\n", bytes_written);
return 0;
}
int serialport_read_bytes(int fd, uint8_t* buf, int n_bytes, int millis) {
ssize_t n;
size_t bytes_read = 0;
while (bytes_read < (size_t)n_bytes) {
n = read(fd, &buf[bytes_read], n_bytes - bytes_read);
if (n == -1) return -1; // couldn't read
if (n == 0) {
usleep(millis * 1000); // wait 1 msec try again
continue;
}
printf("read total: %ld bytes\n", bytes_read);
bytes_read += n;
}
printf("Total bytes read: %ld\n", bytes_read);
return 0;
}
我认为您需要取消ICRNL标志以及。
参见https://viewsourcecode.org/snaptoken/kilo/02.enteringrawmode.html#fix-ctrl-m
toptions.c_iflag &= ~ICRNL;
我有一根绳子, 我想把它转换成一个字节数组。 有人能在这方面引导我吗?我尝试了以下代码,但我得到了ASCII中的数据。我不想那样。
主要内容:适用于字符串构造的规则,字符串操作在R中的单引号或双引号中写入的任何值都将被视为字符串。在R内部将每个字符串存储在双引号内,即使您使用单引号创建它们。 适用于字符串构造的规则 字符串开头和结尾的引号应为双引号或双引号,他们不能混合。 双引号可以插入到以单引号开始和结尾的字符串中。 单引号可以插入到以双引号开始和结尾的字符串中。 双引号不能插入到以双引号开始和结尾的字符串中。 单引号无法插入到以单引号开始和结尾的字符串中。 有效字符
在x86汇编语言中,是否有任何有效的方法将字节转换为二进制数字字符串(表示为0和1的字节数组)?据我所知,x86汇编中没有任何“toString”函数,就像大多数高级编程语言一样。
本文向大家介绍C语言中时间戳转换成时间字符串的方法,包括了C语言中时间戳转换成时间字符串的方法的使用技巧和注意事项,需要的朋友参考一下 在PE格式里有个字段是文件的创建时间戳,我想把转成字符串,这样看的更直观。 以上所述是小编给大家介绍的C语言中时间戳转换成时间字符串的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
问题内容: 我试图将dispatch_queue_create与我在运行时创建的动态字符串一起用作第一个参数。编译器抱怨,因为它期望使用标准的c字符串。如果我将其切换为编译时定义的字符串,错误就会消失。谁能告诉我如何将String转换为标准c字符串? 问题答案: 您可以得到如下: 编辑: Beta 5更新- 不再存在(感谢@Sam):
本文向大家介绍C语言实现将字符串转换为数字的方法,包括了C语言实现将字符串转换为数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现将字符串转换为数字的方法。分享给大家供大家参考。具体实现方法如下: C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子: atoi()函数只有一个参数