Char数组到二进制数组不起作用

时间:2016-01-24 12:20:02

标签: c arrays binary

所以我试图在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

我也希望返回一个字符数组,但我似乎无法做到这一点。

感谢您的帮助!

2 个答案:

答案 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;
}