我正在创建一个C ++程序,用于与串口上的抓取器进行通信。
我必须发送一个类型为“unsigned char [8]”的缓冲区,但是这8个字节中有4个是从键盘输入的,2个是当时计算的CRC。
那么,如何在8字节unsigned char?
的单个缓冲区中连接几个部分例如:
unsigned char buffer[8];
----
unsigned char DLEN[1]={0x05};
----
unsigned char CMD[1]={0x01};
----
unsigned char data[4]={0x00,0x01,0x20,0x41};
----
unsigned char CRC[2]={0xFF,0x41};
----
我如何获得此缓冲区:{0x05,0x01,0x00,0x01,0x20,0x41,0xFF,0x41}
是DLEN
,CMD
,data
和CRC
的联合?
答案 0 :(得分:3)
此:
buffer[0] = DLEN[0];
buffer[1] = CMD[0];
buffer[2] = data[0];
buffer[3] = data[1];
buffer[4] = data[2];
buffer[5] = data[3];
buffer[6] = CRC[0];
buffer[7] = CRC[1];
答案 1 :(得分:1)
另一种解决方案是:
从一个包含8个字符的unsigned char数组开始。
当您需要将其传递给其他方法以将数据插入其中时,请通过引用传递它,如下所示:updateCRC(&buffer[6])
,方法签名采用无符号字符指针。假设您尊重输入的相应大小,结果是两个世界中最好的,处理缓冲区就像它们是单独的字符串一样,并且之后不必将它合并到单个数组中。
答案 2 :(得分:0)
您可以使用位移,<<
和>>
运算符来获取缓冲区中正确位置的相应字段。
像buffer |= (DLEN << 7);
只需确保您的缓冲区被清除为全0。
答案 3 :(得分:0)
我的hmjd的答案版本:
buffer[0] = DLEN[0];
buffer[1] = CMD[0];
std::copy(begin(data),end(data),buffer+sizeof DLEN+sizeof CMD);
std::copy(begin(CRC) ,end(CRC) ,buffer+sizeof DLEN+sizeof CMD+sizeof data);