在C语言中,二进制转换为八进制主要有以下两种方法:
一、按3位二进制分组法(推荐)
分组规则
将二进制数从右向左每3位分为一组,不足3位的在左侧补0。例如:`1011` 分组为 `010` 和 `11`,转换为八进制为 `23`。
实现步骤
- 读取二进制数并补齐位数;
- 逐组转换为对应的八进制数字;
- 拼接结果。
示例代码
```c
include int binaryToOctal(char *binary) { int len = strlen(binary); int octal = 0, power = 1; // 从右向左每3位一组 for (int i = len - 1; i >= 0; i -= 3) { int group = 0; for (int j = 0; j < 3 && i - j >= 0; j++) { group = (group << 1) | (binary[i - j] - '0'); } octal += group * power; power *= 8; } return octal; } int main() { char binary; printf("输入二进制数: "); scanf("%s", binary); int octal = binaryToOctal(binary); printf("二进制 %s 转换为八进制为 %dn", binary, octal); return 0; } ``` 二、十进制中间转换法 转换步骤 - 先将二进制转换为十进制:`binaryNumber = Σ(binary[i] * 2^i)`; - 再将十进制转换为八进制:`octalNumber = Σ(decimalNumber % 8 * 8^i)`。 示例代码 ```c include include int binaryToOctal(long long binaryNumber) { int decimal = 0, octal = 0, i = 0; // 二进制转十进制 while (binaryNumber > 0) { decimal += (binaryNumber % 10) * pow(2, i++); binaryNumber /= 10; } // 十进制转八进制 i = 1; while (decimal > 0) { octal += (decimal % 8) * i; decimal /= 8; i *= 10; } return octal; } int main() { long long binaryNumber; printf("输入二进制数: "); scanf("%lld", &binaryNumber); int octal = binaryToOctal(binaryNumber); printf("二进制 %lld 转换为八进制为 %dn", binaryNumber, octal); return 0; } ``` 总结 按3位分组法效率更高,适合直接处理二进制字符串; 十进制中间转换法逻辑更直观,适合理解进制转换原理。两种方法均可实现二进制到八进制的转换,选择时可根据具体需求和数据类型决定。