我想要读取一个字节字符串以供C中的字符表处理,直到遇到一个字符(0xFF
)。基本上,我正在创建一个函数,该函数应该使用静态二进制文件处理文本,该文件使用自定义字符集为ANSI。
我的代码如下:
short ReadText(char * Path, char * Offset) {
//Declare variables
size_t ReadResult;
FILE * OpenedFile;
short Position;
char CurrentChar;
char FormattedChar;
char * FileContents;
//Populate variables
OpenedFile = fopen(Path, "r");
do {
// >>> Code to gather bytes <<<
}
//Initiate character conversion
do {
fseek(OpenedFile, Position, SEEK_SET);
CurrentChar = fread(
//Character switch I/O
switch(CurrentChar) {enter code here
case 0x00: FormattedChar = ' ';
case 0x01: FormattedChar = 'À';
case 0x02: FormattedChar = 'Á';
case 0x03: FormattedChar = 'Â';
// . . .
}
}
}
我需要知道的是将偏移量中的字节读取到char*
,直到遇到原始字符集的终止字节(0xFF
)。我怎么能这样做?
答案 0 :(得分:1)
我认为您只需要像feof(FILE *)那样添加一个电话,
fseek(OpenedFile, Position, SEEK_SET);
if (feof(OpenedFile) != 0) {
/* end of the file. */
} else {
/* safe to read. */
}
答案 1 :(得分:0)
您好,你可能想要这个,
short ReadText(char * Path, short Offset)
{
//Declare variables
size_t ReadResult;
FILE * OpenedFile;
short Position;
int byte;
unsigned char CurrentChar;
char FormattedChar;
char * FileContents;
//Populate variables
OpenedFile = fopen(Path, "r");
if (OpenedFile == NULL)
{
printf("---File not exist----\n");
return;
}
fseek(OpenedFile, Offset, SEEK_SET);
while(1)
{
unsigned int number;
byte = fscanf(OpenedFile,"%x",&number);
printf("read ::%x\n",number);
switch(number)
{
case 0x00: FormattedChar = ' ';break;
case 0x01: FormattedChar = 'À';break;
case 0x02: FormattedChar = 'Á';break;
case 0x03: FormattedChar = 'Â';break;
....................................
....................................
}
if(number == 0xFF)
break;
}
fclose(OpenedFile);
}
答案 2 :(得分:0)
通过声明目标缓冲区及其大小在ReadText()
之外来建议处理缓冲区。创建一个简单的循环并重复调用fgetc()
并确保将其结果放在int
中以测试EOF并设置翻译。除非只有几个字节要翻译,而不是switch
,否则简单地添加一个256字节的翻译数组。请注意,int CurrentChar
的{{1}}值为0-255。
fgetc()