无符号字符串联
unsigned char concatenation
我正在创建一个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}
,它是DLEN
、CMD
、data
和CRC
的并集?
这:
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);
相关文章:
- 字符串到无符号字符
- 尝试将字符串从文件读取到无符号字符向量中
- 将字符串转换为无符号字符数组/字节数组
- 如何将字符串转换为无符号字符数组
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 如何使用istream_iterator将无符号字符向量转换为字符串?
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将字符串变量分配给无符号字符变量
- 将'\x00\x00\x00'格式的字符串转换为无符号字符数组
- 将无符号字符 * 转换为十六进制字符串
- C++如何将无符号字符数组转换为字符串?
- C++字符串表示中将无符号字符数组转换为长(或长长)
- C++无符号字符串类型的正则表达式
- 将无符号字符转换为字符串,然后再次转换为无符号字符
- 如何将无符号简短转换为无符号字符并将值存储在字符串中
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- C++ 斯特劳斯特鲁普的"std_lib_facilities.h"字符串结构 – 警告:无符号表达式的比较
- 无符号的 int 到 IP 地址字符串,不带 itoa/to_string/boost
- 这个右移是如何工作的:字符串流>>无符号的int>>无符号的int?
- 将十六进制数字从无符号字符转换为字符串