我有以下代码,我尝试在第一次执行时将一些数据写入文件,然后在第二次执行时读取文件并将数据打印到屏幕上。
在第一次执行时,它将数据完全按照代码(</DIV>
)写入屏幕,并按预期创建文件。
问题是当我读回文件并将我读过的内容写到屏幕上时,它只是我在任何文本编辑器中看到的文件的简单内容,而不是原始数据。我不知道我做错了什么。
我很确定第67行有问题,这与我将它打印到屏幕上的方式有关,但我对C很新,并且不习惯于处理数据格式。
test_data
更新我期待看到以下内容:
在第一次执行
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main ()
{
FILE * pdataFile = NULL;
const char * datafilename = "data.bin";
const char * _WRITE = "wb";
const char * _READ = "rb";
uint8_t data[32];
int idx;
unsigned long dataFileLen;
char dataBuffer;
char test_data[] = "ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ";
char * pos = test_data;
pdataFile = fopen(datafilename, _READ);
if (pdataFile == NULL) {
printf("No existing file named: %s .\n", datafilename);
/******** Print Contents of data Array ********/
printf("Random data: ");
for (idx = 0; idx < 32; ++idx) {
sscanf(pos, "%2hhx", &data[idx]);
pos += 2 * sizeof(char);
printf("%02x", data[idx]);
};
printf("\n"); // new line
/******** Save data to File ********/
pdataFile = fopen(datafilename, _WRITE);
if (pdataFile == NULL) {
printf("Error opening file %s for writing. End Program\n", datafilename);
} else {
fwrite (test_data, sizeof(char), sizeof(test_data), pdataFile);
if (ferror (pdataFile))
printf("Error writing file %s.", datafilename);
fclose (pdataFile);
};
} else {
fseek(pdataFile, 0, SEEK_END);
dataFileLen = ftell(pdataFile);
fseek(pdataFile, 0, SEEK_SET);
char *dataBuffer = malloc((dataFileLen+1)*sizeof(unsigned char));
fread(dataBuffer, dataFileLen, 1, pdataFile);
if (ferror (pdataFile))
{
printf("Error reading file contents: %s.", datafilename);
}else{
printf("data read from file: ");
for(idx = 0; idx<dataFileLen; ++idx){
printf("%2hhx", ((char *)dataBuffer)[idx]);
};
};
printf("\n"); // new line
fclose (pdataFile);
};
return 0;
};
第二次执行
Random data: ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ
第二次更新即使在此处发布了答案,我仍然会:
data read from file: ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ
该程序在GCC中编译,应该从这里的代码编译。
答案 0 :(得分:3)
您可能正在将错误数组的内容写入文件。
尝试撰写data
而不是test_data
。
您可能还希望在读取文件时打印的值为前导零(就像您最初打印扫描数据时一样)。