unsigned char concatenation

时间:2012-03-29 15:00:56

标签: c++ char concatenation unsigned

我正在创建一个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}DLENCMDdataCRC的联合?

4 个答案:

答案 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);