这是我到目前为止用于二进制转换的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
unsigned long binaryToDecimal(char *binary, int length);
void binaryToText(char *binary, int binaryLength, char *text, int symbolCount);
void formatBinary(char *input, int length, char *output);
int validate(char *binary);
int main(void)
{
char binary[8063];
int binaryLength;
scanf("%8063[^\n]s", binary);
binaryLength = strlen(binary);
if(validate(binary))
{
int symbolCount = binaryLength / 8 + 1;
char *text = malloc(symbolCount + 1);
char *formattedBinary = malloc(binaryLength + 1);
if(text == NULL || formattedBinary == NULL)
exit(1);
if(binaryLength % 8 == 0)
--symbolCount;
formatBinary(binary, binaryLength, formattedBinary);
binaryToText(formattedBinary, strlen(formattedBinary), text, symbolCount);
printf("%s in binary is the following text:\n%s\n", binary, text);
free(text);
free(formattedBinary);
}
else
{
printf("The input should be a binary number, containing only zeros(0) and ones(1).\n");
}
return 0;
}
void binaryToText(char *binary, int binaryLength, char *text, int symbolCount)
{
int i;
for(i = 0; i < binaryLength; i+=8, binary += 8)
{
char *byte = binary;
byte[8] = '\0';
*text++ = binaryToDecimal(byte, 8);
}
text -= symbolCount;
}
unsigned long binaryToDecimal(char *binary, int length)
{
int i;
unsigned long decimal = 0;
unsigned long weight = 1;
binary += length - 1;
weight = 1;
for(i = 0; i < length; ++i, --binary)
{
if(*binary == '1')
decimal += weight;
weight *= 2;
}
return decimal;
}
void formatBinary(char *input, int length, char *output)
{
while(*input)
{
if(*input == '0' || *input == '1')
{
*output++ = *input++;
}
else
{
++input;
--length;
}
}
output -= length;
}
int validate(char *binary)
{
while(*binary)
{
if((*binary != '0') && (*binary != '1') && (*binary != ' '))
return 0;
++binary;
}
return 1;
}
二进制文件:
0100000101000001001101000011001100100000010001000100011001010111001000000100010001010100010101110010000000110010001100000011000100110110001011010011000000110001001011010011000000110110001000000011000100110001001110100011000000110000000011010000101001000001010000010011010000110011001000000100010001000110010101110010000001000100010101000101011100100000001100100011000000110001001101100010110100110000001100010010110100110001001101110010000000110001001100010011101000110000001100000000110100001010010000010100000100110100001101000010000001010011010001010100000100100000010010100100011001001011001000000011001000110000001100010011010100101101001100000011001000101101001100000011010100100000001101110011101000110100001101010000110100001010010000010100000100110001001110010011011100100000010011110101001001000100001000000100001001001111010100110010000000110010001100000011000100110010001011010011000000110011001011010011000100110010001000000011000100110001001110100011010100110000001000000000110100001 0100100000101000001001100010010000001001010010001100100101100100000010011000100000101011000001000000011001000110000001100010011011000101101001100000011011100101101001100000011001000100000001110010011101000110000001100000000110100001010010011110100111100110111001101000011001100110101001000000100010001010100010101110010000001010000010011000100111000100000001100100011000000110001001101100010110100110001001100010010110100110010001100100010000000110010001100010011101000110101001101010000110100001010010001100011100100110110001100010011001000100000010001000100010101001110001000000100110101001001010000010010000000110010001100000011000100110100001011010011000100110010001011010011000100111001001000000011001000110010001110100011000100110101000011010000101001000100010011000011100000110000001100010010000001000111010001010100011100100000010011010101001101010000001000000011001000110000001100010011011000101101001100000011100000101101001100110011000100100000001110010011101000110000001100000000110100001 010010001000100110000110001001100000011100000110111001000000100000101010100010011000010000001000100010000010100001000100000001100100011000000110001001101100010110100110000001101000010110100110001001100000010000000110001001000100011101000110000001101010000110100001010010001000100100100010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010011001001001001
转换算法本身可以很好地工作。我的主要问题是如何将转换应用于文件本身。如果第一个文件是bin文件,则使用转换将产生一个文本文件,其中所有二进制数字都已完全转换。