gpt4 book ai didi

十六进制到二进制的转换

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:22 24 4
gpt4 key购买 nike

我正在尝试从十六进制字符串中显示二进制字符串。我的代码是

#include <stdio.h>
int main() {
char hexa[5], num[120];
int i = 0, j, k, t;
char ch;
printf("enetr hexadecimal");
while (ch = getchar() != '\n') {
scanf("%c", &ch);
hexa[i] = ch;
i++;
}
k = 0;
for (j = 0; hexa[j] != '\0'; j++) {
if (hexa[j] == 'A') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'B') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == 'C') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == 'D') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == 'E') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'F') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '0') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '1') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '2') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '3') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '4') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '5') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '6') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '7') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '8') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '9') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
}
}
for (t = 0; num[t] != '\0'; t++)
printf("%c", num[t]);
return 0;
}

此代码段仅从十六进制字符串的第一个字符开始显示,而不是整个字符串。请帮助解决导致错误的原因并帮助我纠正错误

最佳答案

您(出于某种原因)将其作为文本处理,这比将其作为实际数字处理要复杂得多。

你可以逃脱这样的事情:

unsigned int hexa;

if(scanf(" %x", &hexa) == 1)
{
int i;
for(i = (CHAR_BIT * sizeof hexa) - 1; i >= 0; --i)
{
putchar('0' + ((hexa & (1u << i)) != 0));
}
putchar('\n');
}

以上将始终生成固定(可能是 32 位)宽度的二进制文件,如果您真的想要一个可变长度的二进制数,您可以采用不同的方式。

关于十六进制到二进制的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com