0

Hi,

I need to read byte by byte data from header-like file. The format of the file is in the link, please take a look
http://imageshack.us/photo/my-images/96/tablefu.jpg/

I dont need the first 128bytes and I need to get the next 4 bytes. My code is like below:

    char* icm_name = "Samsung_to_Cannon.icm";
    char buf[5];

    FILE* fp = fopen(icm_name, "rb");
    fseek( fp, 128, SEEK_SET );
    fread( buf, 1, 4, fp );
    buf[4] = '\0';
    printf("%s\n",buf);

    fclose( fp );

But it returns nothing.. What is wrong with my code? Please give me some advices..

Thanks

4
Contributors
7
Replies
8
Views
5 Years
Discussion Span
Last Post by Ab000dy_85
0

check the return value of fopen() -- its probably failed to open the file. Does the file exist in the current working directory?

0

Yes file is there. If I do the same thing with a text file, it works fine. I guess it is because the format of data in ICM file is not ascii, utf or whatever. And I guess 'fopen' only reads text format of data so it returns reads nothing from header's binary data. Is there any other good function to read file?

0

Yes. fopen(). Your analysis of the problem is completely wrong. fopen() can open any file.

As AD said, "check the return value of fopen()". The fopen() probably failed for some reason.

0

when fopen opens a text file that contains "123456789abcde",
it prints "123456789abcde" well.

when fopen opens a icm file that shows broken texts in notepad,
it prints nothing.

if fopen reads the data from icm file properly, I think I need to do some data conversion such as binary to ascii. How do you think?

0

sometime when using

printf("%s\n",buf);

it prints junk and commands which maybe sometimes show nothing,

what I recomment

try the next code line instead

cout.write(buf, 4) << endl;
0

wow thanks, cout.write(buf, 4) prints the broken texts just like notepad. Which means it reads the file properly.
Now I guess I need to convert the data to whatever readable.. do you have an idae?

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.