【问题标题】:fprintf inserts random Next Lines?fprintf 插入随机下一行?
【发布时间】: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


【解决方案1】:

只是猜测,但我认为 fprintf(fpw,"c","\n") 应该是 fprintf(fpw,"%c","\n")。为什么不只是fprintf(fpw, "\n")

【讨论】:

  • 嗨,是的,我最终将 fprintf 替换为 fputc(10,fpw);无论如何。
  • @BaddaBoompshhh 我明白了。如果您已经找到解决方案,您可以发布答案并将其标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多