Arduino字节数组合并求助:将两组对应元素拼接为8位字节数组
Arduino中合并两个4位字节数组为8位字节数组的实现
要实现将两个4位字节数组对应索引元素合并为8位字节(左元素为高4位,右元素为低4位),核心是利用位运算完成拼接,具体实现如下:
核心逻辑
对数组的每个索引i执行两步操作:
- 将左侧数组元素
digitLeftZero[i]左移4位(<< 4),把原本的4位值转移到8位字节的高4位区域。 - 将右侧数组元素
digitRightZero[i]作为低4位,通过按位或运算(|)与左移后的结果合并,得到完整的8位字节。
如果不确定原数组元素是否仅保留低4位(比如存在高位误存1的情况),可以先对元素做掩码处理(& 0x0F),确保只取低4位再运算,避免干扰。
完整代码示例
// 定义原始的两个4位字节数组 byte digitLeftZero[8] = {0b0000,0b0110,0b1001,0b1001,0b1001,0b0110,0b0000,0b0000}; byte digitRightZero[8] = {0b0000,0b0110,0b1001,0b1001,0b1001,0b0110,0b0000,0b0000}; // 存储合并结果的8位字节数组 byte digitDoubleZero[8]; void setup() { Serial.begin(9600); // 遍历数组完成合并 for (int i = 0; i < 8; i++) { // 基础合并方式(假设原元素都是4位) digitDoubleZero[i] = (digitLeftZero[i] << 4) | digitRightZero[i]; // 安全合并方式(强制保留低4位,避免高位干扰) // digitDoubleZero[i] = ((digitLeftZero[i] & 0x0F) << 4) | (digitRightZero[i] & 0x0F); } // 打印结果验证 for (int i = 0; i < 8; i++) { Serial.print("digitDoubleZero["); Serial.print(i); Serial.print("] = 0b"); Serial.println(digitDoubleZero[i], BIN); } } void loop() { // 无需循环操作 }
结果说明
上传代码后打开串口监视器,输出的二进制值会与你期望的digitDoubleZero数组完全匹配(串口输出会省略前导0,但实际存储的是完整8位字节)。
内容的提问来源于stack exchange,提问作者Kerem B
相关产品推荐
相关产品推荐

