#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *inputFile;
FILE *outputFile;
int encodeBinary[4] = {0x00, 0x01, 0x02, 0x03};
char encodeChars[4] = {':', '@', '\n', ' '};
void encode(const char * inFile, const char * outFile)
{
inputFile = fopen(inFile, "r");
outputFile = fopen(outFile, "w");
char lineBuffer[BUFSIZ];
if(inputFile == NULL)
{
perror("Error while opening file.\n");
exit(EXIT_FAILURE);
}
while(fgets(lineBuffer, sizeof(lineBuffer), inputFile))
{
for(int i = 0; lineBuffer[i] != 0; i++)
{
if(lineBuffer[i] == encodeChars[0])
{
fprintf(outputFile, "%d", encodeBinary[0]);
}
else if(lineBuffer[i] == encodeChars[1])
{
fprintf(outputFile, "%d", encodeBinary[1]);
}
else if(lineBuffer[i] == encodeChars[2])
{
fprintf(outputFile, "%d", encodeBinary[2]);
}
else if(lineBuffer[i] == encodeChars[3])
{
fprintf(outputFile, "%d", encodeBinary[3]);
}
}
}
fclose(inputFile);
fclose(outputFile);
}
void decode(const char * inFile, const char * outFile)
{
inputFile = fopen(inFile, "r");
outputFile = fopen(outFile, "w");
char lineBuffer[BUFSIZ];
if(inputFile == NULL)
{
perror("Error while opening file.\n");
exit(EXIT_FAILURE);
}
while(fgets(lineBuffer, sizeof(lineBuffer), inputFile))
{
for(int i = 0; lineBuffer[i] != 0; i++)
{
if(lineBuffer[i] == '0')
{
fprintf(outputFile, "%c", encodeChars[0]);
}
else if(lineBuffer[i] == '1')
{
fprintf(outputFile, "%c", encodeChars[1]);
}
else if(lineBuffer[i] == '2')
{
fprintf(outputFile, "%c", encodeChars[2]);
}
else if(lineBuffer[i] == '3')
{
fprintf(outputFile, "%c", encodeChars[3]);
}
}
}
fclose(inputFile);
fclose(outputFile);
}
void commands(const char * command, const char * inputFile, const char * outputFile)
{
if(strcmp(command, "encode") == 0)
{
encode(inputFile, outputFile);
}
else if(strcmp(command, "decode") == 0)
{
decode(inputFile, outputFile);
}
}
void testValues(int argc, const char * argv[])
{
if(argc == 4)
{
commands(argv[1], argv[2], argv[3]);
}
else
printf("USAGE: ./encode [input_file] [output_file]\n");
}
//MAIN
int main(int argc, const char * argv[])
{
testValues(argc, argv);
return 0;
}
你好。我有這段代碼。代碼應該得到一個由字符組成的文本文件:@「newline」和「space」。這些字符然後應該被轉換爲二進制,0,1,10,11。之後,我還需要一種方法來解碼回原始字符。我似乎無法弄清楚的是如何能夠讀取數字之間的差異,如果有001,我怎麼知道我們正在談論0,01,而不是00,1。我在某處讀到你可以使用按位操作來做到這一點?任何幫助感謝!c中的編碼和解碼文本
所以,我已經改變了一下我的代碼。現在問題是,當我存儲值時,編碼的文件與要編碼的文件一樣大。如何將值存儲在文件中,以便將值存儲爲十六進制(或二進制),以便編碼文件小於原始文件?
字符是7位(不是必須的)不爲2或3位 – haccks
的是。 ,但是我要將這些字符表示爲每個2位 –
我應該已經更清楚了,但是我必須帶一個帶字符的文件,然後將它們編碼爲另一個文件以進行二進制編碼以節省空間,我該怎麼做? –