【发布时间】:2019-01-05 09:01:50
【问题描述】:
我正在开发一个串行通信程序,用于在主机 PC(Linux)和微控制器之间发送和接收数据。现在我必须向 MCU 发送十六进制字节的数据。 那么如何在不使用 sprint/printf 的情况下将缓冲区字符串数据转换为十六进制字符串,以便用户将“AA12CDFF1000001201”而不是“\xAA\x12\xCD\xFF\x10\x00\x00\x12\x01”之类的字符串发送到 MCU。我也看到了Sending Hexadecimal to Serial Port,但它没有帮助,因为它说我可以使用 sprintf 将字符串转换为十六进制,但在我的情况下,我不想使用 sprintf。 基本上我想要的是: 如果用户输入 = "AA12CDFF1000001201" 我必须将其转换为以下格式 "\xAA\x12\xCD\xFF\x10\x00\x00\x12\x01" 然后将其写入串口。
#include <stdio.h> /* Standard input/output definitions */
#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 */
void main()
{
int fd;
fd = open("/dev/ttyf1", O_RDWR | O_NOCTTY | O_NDELAY);
char buff[]="\xAA\x12\xCD\xFF\x10\x00\x00\x12\x01";
write(fd, buff, sizeof(buff));
close(fd);
}
【问题讨论】:
-
* 在我的情况下,由于某种原因我不想使用 sprintf。* 原因是什么?为什么还要使用
18bytes 长字符串发送9bytes? -
我正在发送 9 字节的十六进制数据 = "\xAA\x12\xCD\xFF\x10\x00\x00\x12\x01" 这对于用户来说输入很乏味,所以我必须做到对用户来说很简单,所以有人只需键入“AA12CDFF1000001201”,就像普通串行终端应用程序一样,我们用户只需键入普通字符串。@tilz0R
-
所以你的问题一开始就失败了。您想将字符串转换为字节,因为您根本不需要 sprintf。甚至不可能做到。
-
好的,我改了。@tilz0R
-
我在下面给了你答案。
标签: c linux serial-port