题
所以我有一个非常简单的程序,可以读取文件的3个第一个字节:
int main(void) { FILE *fd = NULL; int i; unsigned char test = 0; fd = fopen("test.bmp", "r"); printf("position: %ld\n", ftell(fd)); for (i=0; i<3; i++) { fread(&test, sizeof (unsigned char), 1, fd); printf("position: %ld char:%X\n", ftell(fd), test); } return (0); }.
当我用文本文件尝试它时,它可以正常工作:
position: 0 position: 1 char: 61 position: 2 char: 62 position: 3 char: 63.
但是当我用png运行时,我得到:
position: 0 position: 147 char:89 position: 148 char:50 position: 149 char:4E.
请注意,文件的3个第一个字节确实是89 50 4e,但我不知道147来自哪里。 使用BMP文件,我得到:
position: 0 position: -1 char:42 position: 0 char:4D position: 1 char:76.
你知道这些第一职位来自哪里? 非常感谢您的帮助
解决方案
需要以二进制模式打开文件:
fd = fopen("test.bmp", "rb");
.
如果您尝试在文本模式中读取像位图的二进制文件,则对应于回车的字节返回和LineFeeds混淆。
其他提示
请看看这个问题从bmp文件中阅读字节。
看起来问题是在打开它的模式下。
不隶属于 StackOverflow