无符号字符串联

unsigned char concatenation

本文关键字:字符串 无符号      更新时间:2023-10-16

我正在创建一个C++程序,用于与串行端口上的夹具进行通信。

我必须发送一个类型为"unsigned char[8]"的缓冲区,但在这8个字节中,4个是从键盘输入的,2个是当时计算的CRC。

那么,如何在8字节无符号字符的单个缓冲区中连接多个片段呢?

例如:

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的并集?

这:

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];

另一种解决方案是:

从一个包含8个字符的无符号字符数组开始。

当您需要将它传递给其他方法以在其中插入数据时,可以通过引用传递它,如下所示:updateCRC(&buffer[6]),方法签名采用无符号的char指针。假设您尊重输入的各自大小,结果是两全其美,将缓冲区当作单独的字符串来处理,之后不必将其合并到单个数组中。

您可以使用位移位<<>>运算符,将适当的字段放到缓冲区中的正确位置。

类似buffer |= (DLEN << 7);

只需确保您的缓冲区被清除为所有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);