gpt4 book ai didi

c - 试图显示二进制表示

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

我正在使用串行步进电机 Controller 并用 C 对其进行编程。我遇到的问题是 Controller 以二进制表示形式返回值,我不确定如何显示。显然,将它转换为 int 不是一个选项,因为我需要 Controller 发送的精确二进制表示。

输出的形式是:MSB -> LSB(最高有效位到最低有效位)。

目前我正在尝试类似的事情:

char buff[] = "@01 STAT\r";
char readbuff[10];
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
n = write (fd,buff, len);
......

n = read(fd, readbuff, 3);
printf("STAT returns %c\n", readbuff);
......

这会返回无意义的数据,即奇怪的形状和符号。我已将输出设置为原始并使用 0 奇偶校验。我已经跳过了初始化参数,但如果有帮助,可以添加它们。

如果有人好奇我使用的是 Ocean Control KTA-190 串行步进电机。

最佳答案

您将值打印为 %c,即 ASCII 字符,因此是“怪异的形状和符号”。

如果您将 %c 更改为 %d%x,那么您将获得该值的十进制或十六进制表示形式。然后,您可以根据需要将其解释为二进制(例如 0x0A 将是 00001010)。

您还需要确保每个角色都脱离 readbuff。您可能希望遍历并为每个数组索引打印出 %x,如:

for (i = 0; i < 10; i++)
{
printf("readbuff[%d]: 0x%x\n", i, readbuff[i]);
}

(请注意,最好避免使用魔数(Magic Number),因此最好执行类似 #define READBUFF_LEN 10 的操作然后在 readbuff 的定义和循环终止条件中使用 READBUFF_LEN 代替 10。

如果你真的想打印出二进制值,即打印出十六进制或十进制是不够的,那么你需要自己使用位移位进行这种转换。在此处的答案中有一个如何执行此操作的示例:Is there a printf converter to print in binary format?

关于c - 试图显示二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428439/

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