Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取图像文件十六进制值并打印到文件_C - Fatal编程技术网

C 读取图像文件十六进制值并打印到文件

C 读取图像文件十六进制值并打印到文件,c,C,我是C语言的新手,从书中学习。我一直在网上搜索如何读写十六进制值,但我找不到我要找的 基本上,我想读取像jpg这样的图像文件,然后逐字逐句地将其写入文件,但我的代码没有做到这一点 #include<stdio.h> int main() { unsigned long txt; FILE *myimg, *img; myimg=fopen("myimg.jpg","w"); fclose(myimg); myimg=fopen("myimg.

我是C语言的新手,从书中学习。我一直在网上搜索如何读写十六进制值,但我找不到我要找的

基本上,我想读取像jpg这样的图像文件,然后逐字逐句地将其写入文件,但我的代码没有做到这一点

#include<stdio.h>
int main()
{
    unsigned long txt;
    FILE *myimg, *img;

    myimg=fopen("myimg.jpg","w");
    fclose(myimg);
    myimg=fopen("myimg.jpg","rb+");
    img=fopen("img.jpg","rb");txt=0;
    printf("Start");
    while(!feof(img))
    {
        if(img==NULL)
        {
            printf("WTF1");
        }
        txt=fgetc(img);
        fprintf(myimg,"%x",txt);
    }
    return(0);
}
输出文件大小不同,当我在十六进制编辑器中查看它时,没有相似之处。你能告诉我这是怎么做的吗?

假设字符位==8,每个字符都有一个值,如果它是有符号的,那么值的范围是[0..255]或[-128..127]。这在十六进制中由[0x00..0xff]表示。0到15之间的值可以在单个字符中表示为十六进制;其他值需要两个字符才能将单个字符表示为十六进制

将字符的值写为十六进制。对于范围[0..15]之外的值,需要写入2个字符来表示单个字符。e、 g.如果txt==16,将其格式化为十六进制,则会将字符1写入文件,然后将字符0写入文件

您需要改用%c格式说明符

fprintf(myimg,"%c",txt);
或者,如果您使用


你写的和你读的不一样。 读一个字符,但在文本模式下写一个长值,它们是完全不同的。 如果在普通文本编辑器中打开输出文件,并在十六进制编辑器中打开输入文件,则它们的外观应该相同。
只需使用fputc而不是fprintf,您就可以得到您想要的。

步骤1:学习如何正确格式化源代码等。你不使用任何空格,对任何人都没有好处。哇!thanx一吨!!那么%x是用来做什么的呢?我试着给你投票,但是需要15+的代表。thanx,我已经更新了我的答案,更详细一些。简而言之,%x给出了单个字符的文本表示。虽然你还不能投票,但如果你的问题得到解决,你可以投票。
fprintf(myimg,"%c",txt);
fputc(myimg,txt);