【问题标题】:Converting massive binary input string into character string C将海量二进制输入字符串转换为字符串C
【发布时间】:2018-05-18 13:51:05
【问题描述】:

我根本不熟悉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 位二进制字符。

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

【问题讨论】:

  • 1001001011101000010011101110011001000000111011101101111011100100110101101101001011011100110011100100001

标签: c string binary char 8-bit


【解决方案1】:

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

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

【讨论】:

  • 是的,我只是出于测试目的设置了打印...我一定是不小心从错误的文件中获取了该功能。
【解决方案2】:

也许这会有所帮助。我没有编译它,但有这个想法。您可以使用 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;
}

【讨论】:

  • sizeof(256*char)sizeof(int) 相同 - 不足以完成此任务。建议改为result = malloc(sizeof *result * 256);
【解决方案3】:

我只需要一种方法来拆分输入字符串,以允许我转换大量输入的 8 位二进制字符。

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

//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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 2017-03-03
    • 2017-02-23
    • 2014-08-03
    • 2014-08-02
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多