用C语言编写程序二进制转为八进制
时间: 2024-11-22 18:35:31 浏览: 6
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
在C语言中,将一个二进制数转换为八进制数,通常需要手动处理每一位的二进制值,并按照从低位到高位的顺序组合成八进制。这里我们可以利用循环和位运算来实现这个过程。
以下是一个简单的示例函数,用于将给定的二进制字符串转换为八进制:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
char* binary_to_octal(const char *binary);
// 将四位二进制转换为一位八进制并连接结果
static void process_quartet(char octet[], const char binary[]) {
int value = 0;
for (int i = 0; i < 4; i++) {
value <<= 1;
if (binary[i] == '1') {
value |= 1;
}
}
octet[3 - strlen(binary) / 4] = value + '0';
}
// 主函数
char* binary_to_octal(const char *binary) {
// 检查输入是否为非空
if (!binary || strlen(binary) == 0) {
return "Invalid binary input";
}
// 初始化结果数组
char result[9]; // 最多8位八进制加上终止符'\0'
memset(result, 0, sizeof(result));
// 遍历二进制串,每四位一组转换为八进制
for (size_t i = 0; i < strlen(binary); i += 4) {
process_quartet(&result, binary + i);
}
// 如果有剩余的二进制位,填充前导零
while (strlen(result) < 8 && binary[strlen(binary) - 1] == '0') {
result[strlen(result)] = '0';
}
return result;
}
// 示例
int main() {
char binary[] = "11010101"; // 二进制数
char* octal = binary_to_octal(binary);
printf("Binary %s is in octal: %s\n", binary, octal);
free(octal); // 注意释放动态分配的内存
return 0;
}
```
运行上面的程序,会得到二进制数 `11010101` 转换为八进制的结果。
阅读全文