#include "stdafx.h"
int main()
{
int num = 11, i = 10;
char s[10];
while (num != 0)
{
if (num % 2 == 0)
{
num = num / 2;
s[i - 1] = 0;
i = i - 1;
}
if (num % 2 == 1)
{
num = (num - 1) / 2;
s[i - 1] = 1;
i = i - 1;
}
return s[10];
}
printf("\n %s", s[10]);
getchar();
return 0;
}
嗨,我对 C 代码还很陌生,所以也许我忽略了一些非常简单的东西,但是当我运行此代码时,它不会显示任何内容作为输出。我相信还有更多错误至少可以被简化。
最佳答案
#include <stdio.h>
int main()
{
int num = 11, i = 0, j = 0;
char s[33];
char be_s[33];
do
{
s[i] = num % 2 ? '1' : '0';
num = num / 2;
i++;
} while (num != 0);
s[i] = '\0';
printf("Little endian number: %s\n",s);
for(j = 0 ; j < i ; j++)
{
be_s[j] = s[(i - 1) - j];
}
be_s[j] = '\0';
printf("Big endian number: %s\n",be_s);
return 0;
}
正如有人已经解释过的那样,您遇到的问题不止一个:
- s的大小:您要转换的数字有多大? Int(通常)是32位,所以你需要32个字符来写入它。此外,您还需要一个特殊字符来结束字符串“\0”,因此包含 33 个元素的 char 数组对于本练习来说应该没问题
- 字节序:正如您可能注意到的那样,您想用左侧的更高有效位来表达它。问题是你无法知道第一个 1 会在哪里。一个选项是在评估数字后恢复位顺序
- 在一段时间内返回:while 不是函数,如果“返回”,则退出主函数,从而关闭程序
- s[3]:这不是字符串,是字符串的第四个值。如果您希望指针指向字符串的开头,您可以使用
s
,或者如果您想从元素n
开始读取字符串,您可以使用&s[ n - 1]
(&=字符串 s 的 n 个元素的内存地址;请注意,数组从元素 0 开始) - char值0和1:正如其他所说,
char 0
与char '0'
不同,第一个是ascii表中的元素0,第二个是ascii 表中代表零的元素
还有很多东西要说,如果你不明白我的例子就问
关于c - C 中使用 %2 将十进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012291/