我正在尝试将int转换为字符串形式的二进制,但我不能。 请帮我。如何将整数转换为二进制,请告诉我。
Input: 32
Output: 00100000
我的代码:
#include <stdio.h>
#include <string.h>
char converttobinary(int n)
{
int i;
int a[8];
char op;
for (i = 0; i < 8; i++)
{
a[i] = n % 2;
n = (n - a[i]) / 2;
}
for (i = 7; i >= 0; i--)
{
op = strcat(op, a[i]);
}
return op;
}
int main()
{
int n;
char str;
n = 254;
str = converttobinary(n);
printf("%c", str);
return 0;
}
答案 0 :(得分:1)
我试图用最少的修改来修改您的解决方案,以使其起作用。有一些优雅的解决方案,例如使用移位运算符将Integer转换为Binary。
代码中的主要问题之一是您使用字符而不是字符数组。
即char str;
而非char str[SIZE];
另外,您正在对单个字符执行字符串操作。另外,iostream头文件适用于C ++。
下面发布的解决方案中还有很多改进的余地(我仅使您的代码工作时改动很小)。
我的建议是使您的C基础更强,并再次解决该问题。
#include <stdio.h>
#include <string.h>
void converttobinary(int n, char *op)
{
int i;
int a[8];
for (i = 0; i < 8; i++)
{
a[i] = n % 2;
n = (n - a[i]) / 2;
}
for (i = 7; i >= 0; i--)
{
op[i]=a[i];
}
}
int main()
{
int n,i;
char str[8];
n = 8;
converttobinary(n,str);
for (i = 7; i >= 0; i--)
{
printf(" %d ",str[i]);
}
return 0;
}
答案 1 :(得分:0)
char *rev(char *str)
{
char *end = str + strlen(str) - 1;
char *saved = str;
while(end > str)
{
int tmp = *str;
*str++ = *end;
*end-- = tmp;
}
return saved;
}
char *tobin(char *buff, unsigned long long data)
{
char *saved = buff;
while(data)
{
*buff++ = (data & 1) + '0';
data >>= 1;
}
*buff = 0;
return rev(saved);
}
int main()
{
char x[128];
unsigned long long z = 0x103;
printf("%llu is 0b%s\n", z, tobin(x, z));
return 0;
}
答案 2 :(得分:0)
我稍微修改了您的代码以实现所需的功能, 这段代码的结果
n = 10
是
00001010
在这段代码中,我将输入的n位移位,比较该位置是否为1或0,如果存在1或0,则写为“ 1”,如果为0,则写为“ 0”。 >
#include <stdio.h>
void converttobinary(int n, char op[8]){
int auxiliar = n;
int i;
for (i = 0; i < 8; i++) {
auxiliar = auxiliar >> i;
if (auxiliar & 1 == 1){
op[7-i] = '1';
} else{
op[7-i] = '0';
}
auxiliar = n;
}
}
int main (void){
int n = 10;
int i;
char op[8];
converttobinary(n, op);
for(i = 7; i > -1; i--){
printf("%c",op[i]);
}
return 0;
}