将海量二进制输入字符串转换成字符串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
}
我根本不熟悉 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
}