对于Objective-C:
大家好,我正在尝试将十六进制输入转换为二进制。例如,有人进入:
A55
我希望转换为
101001010101
我已经尝试查看过去的帖子,似乎没有人为我工作。任何帮助将不胜感激。
答案 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 conversions和Wikihow 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.