You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino字节数组合并求助:将两组对应元素拼接为8位字节数组

Arduino中合并两个4位字节数组为8位字节数组的实现

要实现将两个4位字节数组对应索引元素合并为8位字节(左元素为高4位,右元素为低4位),核心是利用位运算完成拼接,具体实现如下:

核心逻辑

对数组的每个索引i执行两步操作:

  1. 将左侧数组元素digitLeftZero[i]左移4位(<< 4),把原本的4位值转移到8位字节的高4位区域。
  2. 将右侧数组元素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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:27:34