【发布时间】:2014-09-19 11:51:49
【问题描述】:
我正在尝试编写一个非常简单的程序,它将数据从一个文件“RAW Image file”一点一点地获取到另一个文件中。 除了写入新文件时,它需要是 HEX 并且也只需要每行 (640*6) = 3840 个字符,之后它应该是 NEXTLINE 并再次从 0 到 3840 开始。
如果我用 n 文本编辑器查看我的文件,我应该在每行中看到 3840 个字符,共 480 行。
我的问题是我不断得到随机的下一行,我不知道为什么?是不是因为在使用Printf 时,一些位在一起可能看起来像下一行字符?
我也尝试使用WRITE() 将其全部转储到一个文件中,但我使用 Buffer 数组构造它,但仍然执行相同的操作,并且还逐位写入不打印为 HEX 的位。
这里的代码只是为了给你一个想法,我已经提取了一些牛仔动作来尝试操纵它来做我想做的事,但没有任何效果..其中一些可能根本没有意义。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <fcntl.h>
//#include <unistd.h>
char *readFile(char *fileName);
int main()
{
char *pix;pix = (char *)malloc(sizeof(char));
char Buff[1843201];
char pix8[7];
//int x=0;
FILE *fpw;
///////////////////////////////////////////////////////////
fpw=fopen("NewBmp.bin", "wb");
pix = readFile("test.bin");
int y,z,ByteC;
unsigned long x;
for (y=0;y<=(480);y++)
{
for(x=0;x<=(3840);x+=2)
{
Buff[(480*y +x)]=pix[(480*y +x)];
ByteC = pix[(480*y +x)];
ByteC |= (unsigned char)((pix[(480*y +x+1)])<<4); //<<--Prototype
fprintf(fpw, "%x",(unsigned char)ByteC);
}
Buff[(480 * y)+1]='\n';
fprintf(fpw,"%c","\n");
}
//fwrite(Buff , 1 , 1843201 , fpw );
fclose(fpw);
}
char *readFile(char *fileName) {
FILE *file = fopen(fileName, "r");
char *code;
size_t n = 0;
int c;
if (file == NULL) return NULL; //could not open file
fseek(file, 0, SEEK_END);
long f_size = ftell(file);
fseek(file, 0, SEEK_SET);
code = malloc(f_size);
while ((c = fgetc(file)) != EOF) {
code[n++] = (char)c;
}
code[n] = '\0';
return code;
}
【问题讨论】:
-
既然您已经一次读取文件 1 个字节,为什么不立即将十六进制值打印到另一个文件并保持计数,以便您知道何时打印换行符。整个事情似乎过于复杂。
-
我犹豫是否将其发布为答案,因为我不确定我是否理解整个问题,但似乎这样的事情可以满足您的需求:ideone.com/zIuyhl 如果您需要处理不同大小的图像,您可以对其进行调整以在命令行上获取文件名和宽度/高度。
-
code = malloc(f_size);-->code = malloc(f_size + 1);处理code[n] = '\0';也好添加fclose(file);
标签: c string filewriter