将海量二进制输入字符串转换成字符串C

Converting massive binary input string into character string C

我根本不熟悉 C,所以这可能是一个很容易解决的问题。我正在尝试获取二进制字符序列的输入 char* 数组,例如。 “0100100001101001”,并输出其相关字符串("Hi")。我遇到的问题是想出一种方法将输入拆分为长度为 8 的单独字符串,然后将它们单独转换以最终获得完整的输出字符串。

char* binaryToString(char* b){
    char binary[8];
    for(int i=0; i<8; ++i){
    binary[i] = b[i];
}
printf("%s", binary);
}

我知道如何将 8 位转换成它的字符,我只需要一种方法来拆分输入字符串,使我能够转换大量 8 位二进制字符的输入。

感谢任何帮助...谢谢!

也许这会有所帮助。我没有编译它,但有这个想法。您可以使用 while 循环分别循环每 8 位。并使用 for 循环将 8 位分配给二进制数组。之后将此二进制数组发送到 convert8BitToChar 函数以获得相当于 8 位的字母。然后将字母附加到结果数组。如果有错误,我现在正在写 3 年的 c。这里是伪代码。

char* binaryToString(char* b){
char* result = malloc(sizeof(256*char));
char binary[8];
int nextLetter = 0;
while (b[nextLetter*8] != NULL) { // loop every 8 bit 
    for(int i=0; i<8; ++i){
        binary[i] = b[nextLetter*8+i];
    }
    result[nextLetter] = 8bitToChar(binary));// convert 8bitToChar and append yo result
    nextLetter++;
}
result[nextLetter] = '[=10=]';
return result;
}

据我所知,您的 binaryToString() 函数没有执行您希望它执行的操作。 print 语句只打印 char* b 指向的地址的前八个字符。

相反,您可以使用标准 C 函数 strtol() 将 8 位字符串转换为整数。不需要再转换了,因为二进制、十六进制、十进制等都是相同数据的表示!所以一旦字符串转换成long,就可以使用了表示 ASCII 字符的值。

更新实现(如下所示),然后您可以利用它来打印整个序列。

#include <stdio.h>
#include <string.h>

void binaryToString(char* input, char* output){

    char binary[9] = {0}; // initialize string to 0's

    // copy 8 bits from input string
    for (int i = 0; i < 8; i ++){
        binary[i] = input[i];    
    }

    *output  = strtol(binary,NULL,2); // convert the byte to a long, using base 2 
}

int main()
{

    char inputStr[] = "01100001011100110110010001100110"; // "asdf" in ascii 
    char outputStr[20] = {0}; // initialize string to 0's

    size_t iterations = strlen(inputStr) / 8; // get the # of bytes

    // convert each byte into an ascii value
    for (int i = 0; i < iterations; i++){
        binaryToString(&inputStr[i*8], &outputStr[i]);
    }

    printf("%s", outputStr); // print the resulting string
    return 0;
}

我编译了这个,它似乎工作正常。当然,这可以做得更干净、更安全,但这应该可以帮助您入门。

I just need a way to split the input string in a way that will allow me to convert massive inputs of 8-bit binary characters.

您可以使用 strncpy() 从输入字符串中一次从 8 个字符中复制 '0''1' 的序列,如下所示:

//get the size of input string
size_t len = strlen(b);

//Your input array of '0' and '1' and every sequence of 8 bytes represents a character
unsigned int num_chars = len/8;

//Take a temporary pointer and point it to input string
const char *tmp = b;

//Now copy the 8 chars from input string to buffer "binary"
for(int i=0; i<num_chars; ++i){
    strncpy(binary, tmp+(i*8), 8);

    //do your stuff with the 8 chars copied from input string to "binary" buffer

}