【发布时间】:2012-01-02 13:37:08
【问题描述】:
我以前看过一些关于此的主题,但大多数解决方案都是用 Python 编写的(诅咒你这么容易!)。
在 C 中是否有一种简单的方法可以做到这一点?这就是我的解决方案所需要的。我知道它在概念上并不复杂,但我对 C 字符串操作和地址处理感到非常恐惧。
谢谢你们的帮助,伙计们!
---------编辑-------------
好的,所以我解决了这个问题,我还有另一个问题(我不想打开一个新线程!)。下面是我对给定代码的修改,包括函数调用和输出。
void htoi(const char *ptr, char *binAddr) {
char value[32] = "";
char ch = *ptr;
int i;
const char* quads[] = {"0000", "0001", "0010", "0011", "0100", "0101",
"0110", "0111", "1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};
while (ch == ' ' || ch == '\t')
ch = *(++ptr);
for (i = 0; i < 8; i++) {
if (ch >= '0' && ch <= '9')
strncat(value, quads[ch - '0'], 4);
if (ch >= 'A' && ch <= 'F')
strncat(value, quads[10 + ch - 'A'], 4);
if (ch >= 'a' && ch <= 'f')
strncat(value, quads[10 + ch - 'a'], 4);
ch = *(++ptr);
printf("%s\n", value);
}
*binAddr = *value;
}
这是我的函数调用:
char line[11], hexAddr[8], binAddr[32];
htoi(hexAddr, binAddr);
printf("%s\n", binAddr);
这是输出(当输入 001133c0 时):
0000
00000000
000000000001
0000000000010001
00000000000100010011
000000000001000100110011
0000000000010001001100111100
00000000000100010011001111000000
0...
最后一行(带有特殊字符)是上面 main 函数中的 printf(binAddr)。从函数内部的 printf 语句可以清楚地看出,二进制代码的构造是正确的。
再一次,这归结为我在地址操纵方面一文不值。我做错了什么?
【问题讨论】:
-
别傻了,但这里可能没有人会为您编写此代码。这是一个让您变得不那么“可怕的 C 字符串操作和地址处理”的好机会。试一试并提出问题。