C语言整数转二进制:树莓派环境下命令行参数程序咨询
针对树莓派的十进制转4位二进制C程序实现
看起来你已经搭好了递归转二进制的核心逻辑,我来帮你补全整个程序的参数校验与完整流程,确保它在树莓派上能稳定运行:
完整可运行代码
#include <stdio.h> #include <stdlib.h> #include <ctype.h> // 递归实现十进制转二进制 int convert(int dec) { if (dec == 0) { return 0; } else { return (dec % 2 + 10 * convert(dec / 2)); } } // 辅助函数:检查输入字符串是否为纯数字 int is_valid_number(const char *str) { if (*str == '\0') return 0; while (*str) { if (!isdigit((unsigned char)*str)) { return 0; } str++; } return 1; } int main(int argc, char *argv[]) { // 校验命令行参数数量 if (argc != 2) { fprintf(stderr, "错误:请传入一个参数!用法:%s <0-15之间的整数>\n", argv[0]); return EXIT_FAILURE; } // 校验参数是否为有效数字 if (!is_valid_number(argv[1])) { fprintf(stderr, "错误:参数必须是0-15之间的整数!\n"); return EXIT_FAILURE; } int input_num = atoi(argv[1]); // 校验数字范围是否符合要求 if (input_num < 0 || input_num > 15) { fprintf(stderr, "错误:数字必须处于0到15之间!\n"); return EXIT_FAILURE; } // 转换并格式化输出(补前导零到4位,符合0-15的二进制位数) int binary_result = convert(input_num); printf("十进制%d对应的4位二进制是:%04d\n", input_num, binary_result); return EXIT_SUCCESS; }
关键细节说明
- 参数校验环节:
- 先检查
argc是否为2,确保用户只传入一个目标数字 - 用
is_valid_number过滤非数字输入,避免atoi转换时产生意外结果 - 严格校验数字范围在0-15之间,符合你的需求
- 先检查
- 二进制输出优化:
你的递归转换逻辑是可行的,但对于0-3这类小数字,转换结果只有1-2位,用%04d格式化输出可以自动补全前导零,保证输出是标准的4位二进制(比如输入3会输出0011而非11) - 树莓派编译运行:
这是标准C代码,直接在树莓派终端用gcc编译即可:gcc binary_convert.c -o binary_convert ./binary_convert 9
可选优化方案
如果觉得递归不够直观,也可以用循环实现二进制转换,输出逻辑更可控:
void convert_with_loop(int dec) { int bits[4] = {0}; // 0-15最多4位二进制,初始化数组存每一位 int index = 3; while (dec > 0 && index >= 0) { bits[index] = dec % 2; dec /= 2; index--; } // 逐位输出4位二进制 for (int i = 0; i < 4; i++) { printf("%d", bits[i]); } printf("\n"); }
把main函数里的输出部分换成调用这个函数,就能得到同样的效果,递归和循环版本各有优劣,看你个人偏好。
内容的提问来源于stack exchange,提问作者S. N




