C 读取图像文件十六进制值并打印到文件
我是C语言的新手,从书中学习。我一直在网上搜索如何读写十六进制值,但我找不到我要找的 基本上,我想读取像jpg这样的图像文件,然后逐字逐句地将其写入文件,但我的代码没有做到这一点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.
#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);