因此,我正在开发一个程序,该程序将一个字符文件转换为二进制数字字符文件。然后我必须能够读取这些字符(二进制字符)并将它们转换回指定的字符。
所以本质上这是对文件进行编码和解码。
所以我有一个包含四个字符的文件:'@'、'/n'、':'、''。(最后一个是空格)
所以我想这样做的原因是我有一堆我想存储在较小文件中的 ascii 图片。
有人告诉我,我可以使用 unsigned char,将其设置为 0,然后读取包含上述字符的文件,并使用按位运算符将读取的值分配给 unsigned char,然后读取每四个字符(因为每个字符是 8 位,然后这些可以变成 2 位并存储在一个字符中,因此一个字符中有四个字符)将每个数字附加(添加)到字符。
任何帮助表示赞赏!
我现在的代码是这样的:
#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);
}
如果有人能想出一些例子来说明如何将读入的位添加到临时字符中,我将不胜感激。我不知道如何将数字添加到字符中,以便它们以这样的方式移动并以代表旧数字和新数字的方式添加。我想我可以将数字向左移动 3 次,使 01 变为 0100。