gpt4 book ai didi

C++从串口输出可读的十六进制代码

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:46 24 4
gpt4 key购买 nike

我这里有一些 C 代码可以从串行设备读取输出。我目前正在使用 perl 从设备读取数据并且工作正常,但我更愿意用 C 编写一些东西来完成同样的工作。

这是我目前得到的代码;

#include<stdio.h>   /* Standard input/output definitions */
#include<stdlib.h>
#include<string.h> /* String function definitions */
#include<unistd.h> /* UNIX standard function definitions */
#include<fcntl.h> /* File control definitions */
#include<errno.h> /* Error number definitions */
#include<termios.h> /* POSIX terminal control definitions */
#include<string.h>
#include<unistd.h>

char *buf;
int fd; /* File descriptor for the port */
int i,n;

int open_port(void)
{
fd = open("/dev/ttyUSB1", O_RDWR | O_NOCTTY | O_NDELAY);

if (fd == -1) {
perror("cannot open");
}
else
fcntl(fd, F_SETFL, 0);
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B38400);
cfsetospeed(&options, B38400);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);
options.c_cflag &= ~CSIZE;
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
// options.c_cflag |= (IXON | IXOFF | IXANY); // xon & xoff on
return (fd);
}

int main(int argc) {
buf=malloc(4095);
open_port();
free(buf);
while(1){
read(fd,buf,128);
printf("%s\n",buf);
}
close(fd);
}

当我编译并运行它时输出数据,但我看到的数据是垃圾格式...我想看到的是可读的十六进制数据,如 0AEA4E2A ...任何人都知道我如何轻松转换数据变成可读的十六进制代码?我已经在谷歌上搜索了一段时间,但似乎什么都做不了。

这是我在 perl 中所做的;

while ($timeout>0) {
my ($count,$saw)=$PortObj->read(1); # will read _up to_ 255 chars
if ($count > 0) {
$chars+=$count;
$buffer.=$saw; my $hex = unpack 'H*', $saw; printf ($hex);

最佳答案

大概你想要“统一的”十六进制代码,必要时用零填充,你还想打印所有数据(“%s”格式说明符期望一个以 NUL 结尾的字符串,所以如果你的二进制数据中有零,那肯定行不通):

read(fd, buf, 128);
int i;
for (i = 0; i < 128; i++) {
printf("%02x ", buf[i]);
}

您还需要将 buf 声明为 unsigned char *;,并且您还应该始终检查 read() 的返回值。

关于C++从串口输出可读的十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14921521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com