对于 Objective-C:
大家好,我正在尝试将十六进制输入转换为二进制。例如,有人输入:
A55
我希望将其转换为
101001010101
我试过浏览过去的帖子,但似乎没有一个对我有用。任何帮助将不胜感激。
对于 Objective-C:
大家好,我正在尝试将十六进制输入转换为二进制。例如,有人输入:
A55
我希望将其转换为
101001010101
我试过浏览过去的帖子,但似乎没有一个对我有用。任何帮助将不胜感激。
使用查找表:十六进制表示中只有 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
s 放置在与字符代码相对应的元素 处(即在位置'0'
, '1'
, ..., 'E'
, 'F'
, 用单引号;这些非常重要)。
我相信有一个内置的功能。如果没有,你至少应该能够去 hex->dec 然后 dec->bin
如果您知道字符数,则可以从头开始编写转换,bin 到 hex 在算法上足够常见。
构建一个查找表(一个数组,您可以在其中提供一个 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.