c - 在 C 中将 int 转换为二进制字符串
问题描述
我正在尝试将整数转换为二进制字符串(请参见下面的代码)。我已经查看了几个类似的代码片段,但似乎无法找到为什么这不起作用的原因。它不仅不会产生正确的输出,而且根本没有输出。有人可以向我详细解释我做错了什么吗?
#include <stdio.h>
#include <stdlib.h>
char* toBinaryString(int n) {
char *string = malloc(sizeof(int) * 8 + 1);
if (!string) {
return NULL;
}
for (int i = 31; i >= 0; i--) {
string[i] = n & 1;
n >> 1;
}
return string;
}
int main() {
char* string = toBinaryString(4);
printf("%s", string);
free(string);
return 0;
}
解决方案
线
string[i] = n & 1;
正在分配整数0
或1
给string[i]
。它们通常不同于字符'0'
和'1'
。您应该添加'0'
将整数转换为字符。
另外,作为@EugeneSh。指出,线
n >> 1;
没有效果。它应该是
n >>= 1;
更新n
' 值。
此外,正如@JohnnyMopp 指出的那样,您应该通过添加空字符来终止字符串。
还有一点,您应该检查是否malloc()
成功。(它在函数中完成,但在打印结果之前toBinaryString
没有签入)main()
最后,在使用for 的大小时使用幻数31
来初始化for
循环看起来不太好。sizeof(int)
malloc()
固定代码:
#include <stdio.h>
#include <stdlib.h>
char* toBinaryString(int n) {
int num_bits = sizeof(int) * 8;
char *string = malloc(num_bits + 1);
if (!string) {
return NULL;
}
for (int i = num_bits - 1; i >= 0; i--) {
string[i] = (n & 1) + '0';
n >>= 1;
}
string[num_bits] = '\0';
return string;
}
int main() {
char* string = toBinaryString(4);
if (string) {
printf("%s", string);
free(string);
} else {
fputs("toBinaryString() failed\n", stderr);
}
return 0;
}
推荐阅读
- latex - 如何在第一行下方创建带有子标题的多行多列表
- multithreading - 具有性能记录的多线程基于频率的采样
- ros - ROS 主题尚未发布
- typescript - 带有 typescript 的示例 React Native 项目有很多类型错误
- pine-script - 试图找到自高点以来的酒吧
- node.js - Redis 变慢了
- ios - IOS ChatSDK - 无法观察账户状态更新
- java - 运行ant build.xml 未知目标的批处理文件
- flutter - 将倒数计时器创建为水平线 Flutter
- laravel - 如何在 laravel 中将商品添加到购物车?