我根本不熟悉C,所以这可能是一个简单的问题需要解决。我正在尝试使用二进制字符序列的输入char *数组,例如。 “0100100001101001”,并输出其相对字符串(“Hi”)。我遇到的问题是想出一种方法将输入分成长度为8的单独字符串,然后将它们单独转换为ulimately获取完整的输出字符串。
char* binaryToString(char* b){
char binary[8];
for(int i=0; i<8; ++i){
binary[i] = b[i];
}
printf("%s", binary);
}
我知道如何将8位转换为其字符,我只需要一种方法来分割输入字符串,这样我就可以转换8位二进制字符的大量输入。
感谢任何帮助......谢谢!
答案 0 :(得分:2)
据我所知,你的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;
}
我编译了这个,似乎工作正常。当然,这可以做得更干净,更安全,但这应该可以帮助你开始。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
我只需要一种方法来分割输入字符串,这样我就可以转换8位二进制字符的大量输入。
您可以使用strncpy()
一次从输入字符串中复制'0'
和'1'
一个8
个字符的序列,如下所示:< / p>
//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
}