如何将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
相关产品推荐
相关产品推荐

