我根本不熟悉 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;
}
我编译了这个,它似乎工作正常。当然,这可以更干净、更安全,但这应该可以帮助您入门。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句