如何将hex转换为二进制?

时间:2013-03-05 01:41:38

标签: objective-c

对于Objective-C:

大家好,我正在尝试将十六进制输入转换为二进制。例如,有人进入:

A55

我希望转换为

101001010101

我已经尝试查看过去的帖子,似乎没有人为我工作。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

使用查找表:HEX表示中只有16个可能的字符,每个字符对应一个四字符的二进制代码组。逐个字符地浏览HEX,获取查找,并将其放在结果NSString中。

这是您的查找表的副本。

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

如何进行查找有多种选择。最简单的方法是制作一个128个元素的数组,并将NSString放在与字符的代码对应的元素上(即位置'0',{{1} },...,'1''E',带单引号;这些非常重要。)

答案 1 :(得分:1)

我相信这有一个内置功能。如果没有,你应该至少能够去hex-> dec,然后dec-> bin

如果您知道字符数,则可以从头开始编写转换,bin到hex在算法上是通用的。

答案 2 :(得分:0)

Google是你的朋友。我找到了this link that gives sample conversionsWikihow with steps,我相信还有更多。至少你可以让程序循环完成这些步骤。

答案 3 :(得分:0)

构建一个查找表(一个数组,您可以在其中提供0到15之间的值以获取该十六进制数字的二进制数):

char *hex_to_bin[] = {
    "0000", "0001", "0010", "0011",
    /* ... */
    "1100", "1101", "1110", "1111"
};

该表中应该有16个元素。多位数的转换过程是一次处理一个数字,将结果附加到结果存储的末尾。

使用getchar()读取字符:

int c = getchar();
if (c < 0) { puts("Error: Invalid input or premature closure."); }

使用strchr()确定要检索的数组索引:

char *digits = "00112233445566778899AaBbCcDdEeFf";
size_t digit = (strchr(digits, c) - digits) / 2;

查找数字的相应二进制值:

printf("%s", hex_to_bin[digit]); // You'll want to use strcat here.