繁体   English   中英

将大量二进制输入字符串转换为字符串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位二进制字符的大量输入的方法。

任何帮助表示赞赏...谢谢!

据我所知,您的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;
}

我对此进行了编译,似乎工作正常。 当然,这样做可以更清洁,更安全,但这应该可以帮助您入门。

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

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] = '\0';
return result;
}

我只需要一种分割输入字符串的方式,使我可以转换大量的8位二进制字符输入。

您可以使用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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM