我正在尝试编写一个非常简单的程序,将一个文件“RAW Image file”中的数据逐位传输到另一个文件。 除非它被写入新文件,它需要是HEX并且还需要特别是每行为(640 * 6)= 3840个字符,之后它应该是NEXTLINE并再次从0到3840开始。
如果我用n文本编辑器查看我的文件,我应该在每行中看到480个字符,共480行。
我的问题是我继续随机下一行,我不知道为什么?可能是因为在使用Printf
时,某些位可能看起来像下一行字符?
我已经尝试使用WRITE()
将它全部转储到一个文件中,但是我使用Buffer数组构造它但仍然是同样的事情并且还会一点一点地写入不打印为HEX的文件。
这里的代码只是为了给你一个想法,我已经拉了一些牛仔动作试图操纵它去做我想要的但没有任何作用......其中一些根本没有意义。< / p>
#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;
}
答案 0 :(得分:0)
只是一个猜测,但我认为fprintf(fpw,"c","\n")
应该是fprintf(fpw,"%c","\n")
。为什么不只是fprintf(fpw, "\n")
。