所以我在工作中开始了一个新项目,它引入了许多新概念。
我正在使用arinc429 USB盒和c,需要读取缓冲区中的信息,这很好,这是我后来遇到的数据怎么处理我有点麻烦。
对于缓冲区中的每个数据项,我得到一个arinc_low和arinc_high无符号long,它们都代表十六进制值的结束和开始。如何获取这两个十六进制值,将它们放在一起并构造32位字,以便我可以检索我需要的内容,例如,1-8位用于标签等。
到目前为止,我有以下内容:
snprintf(low, 16, "%lx", buffer[i].arinc_low);
snprintf(high, 16, "%lx", buffer[i].arinc_high);
我可以通过它迭代生成的字符:
for(i=0;i<sizeof(low);i++)
{
printf("%d", low[i]);
}
等。
我得到的结果是:
102 55 102 -24 ......
这些是构成我所追求的32位字的位,从查看文档看起来这些是合理的数字要回来。就像我说的那样,这个项目真的为我带来了很多新的概念,我过去一直在稍微瞥一眼,但从未真正投入实际应用。
感谢。
答案 0 :(得分:0)
您需要查看按位运算符。特别是右移和左移操作符(观察您的Endianness),以便例如将变量设置为arinc_high
然后相应地移动它。然后,您将使用按位OR设置剩余部分,例如。