我正在使用一个串行步进电机控制器并用C编程。我遇到的问题是控制器以二进制表示形式返回值,我不知道如何显示。显然将其转换为int不是一个选项,因为我需要控制器发送的确切二进制表示。
输出格式如下: 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);
......
这会返回无意义的数据,即奇怪的形状和符号。我已将输出设置为raw并使用0奇偶校验。我已经跳过了初始化参数,但如果有帮助可以添加它们。
如果有人好奇我正在使用Ocean Control KTA-190系列步进电机。
答案 0 :(得分:3)
您打印的值为%c,即ASCII字符,因此是“奇怪的形状和符号”。
如果您将%c
更改为%d
或%x
,那么您将获得该值的十进制或十六进制表示。然后,您可以根据需要将其解释为二进制(例如0x0A将为00001010)。
您还需要确保从readbuff中获取每个角色。您可能希望循环并打印每个数组索引的%x,如:
for (i = 0; i < 10; i++)
{
printf("readbuff[%d]: 0x%x\n", i, readbuff[i]);
}
(注意,最好避免使用幻数,所以做#define READBUFF_LEN 10
这样的事情会更好
然后在readbuff的定义和循环终止条件中使用READBUFF_LEN
代替10。
如果你真的想要打印出二进制值,即打印出十六进制或十进制数是不够的,那么你需要自己使用位移来进行这种转换。 这里有一个如何在答案中执行此操作的示例:Is there a printf converter to print in binary format?