C语言中如何将存储二进制位的int数组转换为单个int数值
实现思路
核心逻辑是逐位把KEY数组中存储的二进制位拼接为32位整数,默认KEY[0]对应32位整数的最高有效位(和你给出的二进制序列顺序一致),每个KEY元素存储的是单比特值(0或1)。
代码实现
// 如果需要使用无符号32位整数避免符号位问题,引入下方头文件即可 // #include <stdint.h> int keyToBin(const int KEY[32]) { int res = 0; for (int i = 0; i < 32; i++) { // 左移1位空出最低位,将当前二进制位存入 res = (res << 1) | (KEY[i] & 1); // &1 是兼容异常场景,确保即使KEY[i]不是0/1也只取最低比特位 } return res; } // 测试示例 int main() { // 对应你给出的 01010100010010010100111101001110 序列 int KEY[32] = { 0,1,0,1,0,1,0,0, 0,1,0,0,1,0,0,1, 0,1,0,0,1,1,1,1, 0,1,0,0,1,1,1,0 }; int KEY_BIN = keyToBin(KEY); // 输出KEY_BIN结果为 1414090574,符合预期 return 0; }
注意事项
- 如果你的
KEY数组存储顺序是KEY[0]对应最低有效位,把遍历顺序改为从i=31到i=0即可。 - 如果需要处理最高位为1的二进制序列,避免有符号
int的溢出问题,建议将返回值和res变量的类型替换为uint32_t。
内容的提问来源于stack exchange,提问作者Andrew Masden
相关产品推荐
相关产品推荐

