-2

对于 Objective-C:

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

A55

我希望将其转换为

101001010101

我试过浏览过去的帖子,但似乎没有一个对我有用。任何帮助将不胜感激。

4

3 回答 3

3

使用查找表:十六进制表示中只有 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 元素的数组,并将NSStrings 放置在与字符代码相对应的元素 处(即在位置'0', '1', ..., 'E', 'F', 用单引号;这些非常重要)。

于 2013-03-05T01:49:08.977 回答
1

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

如果您知道字符数,则可以从头开始编写转换,bin 到 hex 在算法上足够常见。

于 2013-03-05T01:49:59.240 回答
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;

查找 digit 对应的二进制值:

printf("%s", hex_to_bin[digit]); // You'll want to use strcat here.
于 2013-03-05T01:53:05.493 回答