2016-01-24 42 views
0

所以我想做一个字符串在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

'的sizeof(char)的'始终为1 –

+0

@iharob并非所有系统上,我不认为(如Raspbian) – madcrazydrumma

+2

这是强制性的按标准。它必须是1.是否CHAR_BITS是8,这是别的,但sizeof(char)必须是1. –

回答

3

Oopsie:

char **string 

你想传递一个字符串,这是一个char *。而是将指针传递给指针。

int stringLength = (sizeof(string)/sizeof(char)) + 1; 

似乎是偶然来的工作,因为sizeof(string)回报率4(指针的大小)平台上,和“你好”是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; 
} 
+0

糟糕的'NULL == charArray'我甚至不能看它。那你为什么不用'CHAR_BITS'呢?另外,请仔细阅读代码。 –

+2

@iharob - 这并不可怕 - 这是约达会议。 –

+0

@EdHeal我知道,我非常讨厌它。我很难理解。我知道它可以防止意外的分配,但读起来不太自然。 –

4

你对stringLength的计算是错误的,sizeof是一个运算符,它给你一个类型的大小,具有数组类型的对象当然会返回数组的大小。但你的string变量不是一个数组,它是一个指针,并且poitner的大小不是它指向的内容的长度。

而且,我怀疑你是在做别的事情错了,因为这

char c = string[i]; 

是错误的string[i]类型是char *char

您没有发布所有代码,但这些代码中有2个错误。不清楚为什么如果您不想更改参数,您将char **传递给函数。

+0

它给了我字符串中的字符数量,所以它肯定是有效的。 – madcrazydrumma

+0

这是错的。除非你有证据证明他们错了,否则不要与更有经验的程序员相矛盾。如果这是正确的,为什么要添加'1'?和字符串的长度是多少?你可以改变它吗? –

+0

那么我该如何正确计算stringLength呢? – madcrazydrumma