所以我试图在C中创建一个字符串到二进制方法。到目前为止,这是我的代码:
int main(int argc, char **argv) {
convertStringToBits("hello");
}
char *convertStringToBits(char **string) {
int i;
int stringLength = strlen(string);
int mask = 0x80; /* 10000000 */
char charArray[stringLength * 8]; //* 8 for char bits?
for(i = 0; i < (sizeof(string) / sizeof(char)) + 1; i++) {
mask = 0x80;
char c = string[i];
while(mask > 0) {
printf("%d", (c & mask) > 0);
mask >>= 1; /* move the bit down */
//add to char array
}
printf("\n");
}
return charArray;
}
hello
的预期输出应为:
01101000
01100101
01101100
01101100
01101111
但我明白了:
01101000
01101111
01100011
00100000
01011011
我也希望返回一个字符数组,但我似乎无法做到这一点。
感谢您的帮助!
答案 0 :(得分:4)
stringLength
的计算错误,sizeof
是一个运算符,它给出了类型的大小,具有数组类型的对象当然会返回数组的大小。但是你的string
变量不是一个数组,它是一个指针,而一个poitner的大小不是它指向的内容的长度。
此外,我怀疑你做错了其他事情,因为这个
char c = string[i];
错误,string[i]
的类型为char *
而非char
。
您没有发布所有代码,但这些代码中有2个错误。如果您不想更改参数,则不清楚为什么要将char **
传递给函数。
答案 1 :(得分:3)
Oopsie:
char **string
您想传递一个字符串,即char *。而是将指针传递给指针。
此
int stringLength = (sizeof(string) / sizeof(char)) + 1;
似乎是偶然的,因为sizeof(string)
在您的平台上返回4(指针的大小) ,而“Hello”是5个字符。你想要
int stringLength = strlen(string);
这也行不通:
char charArray[stringLength * 8]; //* 8 for char bits?
因为它的记忆只存在于“功能”内部。要将其传递到外部,您需要使用malloc()分配它:
char *charArray;
charArray = malloc(8*stringLength+1);
// Check that malloc returned a valid pointer. It's almost certain
// that it will, but the one time it might return NULL...
if (charArray == NULL) {
// ...you want to know it. Using charArray now would crash.
printf("An error occurred\n");
// Either return something harmless or something that will
// show to the upstream code that an error occurred.
return NULL;
}