C

时间:2018-12-10 22:15:59

标签: c

这是我到目前为止用于二进制转换的代码:

#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文件,则使用转换将产生一个文本文件,其中所有二进制数字都已完全转换。

0 个答案:

没有答案