そのため、文字のファイルを取得して、これらを2進数の文字のファイルに変換するプログラムに取り組んでいます。次に、これらの文字 (バイナリ文字) を読み取って、指定された文字に戻すことができる必要があります。
したがって、本質的にこれはファイルのエンコードとデコードです。
「@」、「/n」、「:」、「 」の 4 文字のファイルがあります。(最後はスペース)
私がこれをやりたい理由は、小さいファイルに保存したい ASCII 画像がたくさんあるからです。
unsigned char を使用して 0 に設定し、上記の文字を含むファイルを読み取り、ビットごとの演算子を使用して、読み取った値を unsigned char に割り当て、4 文字ごとに読み取ることができると言われました (それぞれ文字は 8 バイトであり、これらをそれぞれ 2 バイトに変換して 1 文字に格納できるため、1 文字に 4 文字) 各数値を文字に追加 (加算) します。
どんな助けでも大歓迎です!
私が今持っているコードはこれです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *inputFile;
FILE *outputFile;
int encodeBinary[4] = {0x00, 0x01, 0x02, 0x03};
char encodeChars[4] = {':', '@', '\n', ' '};
//reads from a file and creates the encoded file
void encode(const char * inFile, const char * outFile)
{
inputFile = fopen(inFile, "r");
outputFile = fopen(outFile, "w");
char lineBuffer[BUFSIZ];
int size = 0;
char temp = 0;
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++)
{
//adds four different characters to a char before adding the character to the file
if(size < 4) {
if(lineBuffer[i] == encodeChars[0])
{
}
else if(lineBuffer[i] == encodeChars[1])
{
}
else if(lineBuffer[i] == encodeChars[2])
{
}
else if(lineBuffer[i] == encodeChars[3])
{
}
size++;
} else {
size = 0;
temp = 0;
}
}
}
fclose(inputFile);
fclose(outputFile);
}
読み込まれたビットを一時文字に追加する方法として、誰かがいくつかの例を考え出すことができれば、本当に感謝しています。古い数字と新しい数字を表すような方法で数字を移動したり追加したりするために、数字をcharに追加する方法についてはわかりません。01が0100になるように、数値を左に3回ビットシフトできると考えています。