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

如何将int转换为二进制数组以实现Arduino的EEPROM地址传输

实现方案

Arduino平台下默认int类型为16位(2字节),绝大多数EEPROM的地址传输要求也是按高低字节拆分发送,你可以直接通过位运算完成拆分,不需要额外做二进制字符串转换,下面分两种常见场景给出实现代码:

场景1:拆分为高低字节数组(EEPROM通讯常用场景)

大部分I2C/SPI接口的EEPROM只需要按字节传输地址参数,用以下方式拆分即可:

int targetAddr = 0x1234; // 你的int类型地址值
byte addrBuf[2];

// 拆分地址
addrBuf[0] = highByte(targetAddr); // 提取高8位,等效于 (targetAddr >> 8) & 0xFF
addrBuf[1] = lowByte(targetAddr);  // 提取低8位,等效于 targetAddr & 0xFF

// 后续直接按EEPROM通讯要求的顺序发送addrBuf的两个字节即可

如果你的EEPROM要求先发低字节,调换两个元素的发送顺序即可。

场景2:拆分为单个bit的二进制数组

如果确实需要把地址的每一位二进制值单独存入数组,用循环移位逐位提取即可:

int targetAddr = 0x1234;
byte bitBuf[16]; // 16位int对应16个二进制位

// 从最高位到最低位依次提取存入数组
for(int i = 0; i < 16; i++){
  bitBuf[i] = (targetAddr >> (15 - i)) & 0x01;
}
// 如果需要从最低位开始存储,把循环内的逻辑改成 (targetAddr >> i) & 0x01 即可

提取完成后bitBuf的每个元素都是0或1,对应地址的每一位二进制值,按你的传输逻辑发送即可。

注意事项

  • 如果你用的是32位架构的Arduino兼容板(比如ESP32),int默认是4字节,对应调整数组长度和移位上限即可,32位值拆字节可以直接用(val >> 24) & 0xFF、(val >> 16) & 0xFF这类位运算实现,不需要依赖highByte/lowByte接口。
  • 发送前确认你所用EEPROM的时序要求,避免高低字节顺序搞反导致地址访问错位。

内容的提问来源于stack exchange,提问作者shrek231

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:48:04