Reading Binary file
8 answers - 558 bytes -

Hi,
I have binary file say, "test.bin". I write "FF" in the file and expect
my code to read 255 for me.
char * lbuf;
int lreadBytes ;
long lData;
FILE *pFile = fopen ("c:\\testbin","rb");
// Read data from binary file
lreadBytes = fread(lbuf,1 ,1,pFile);
if(lreadBytes!= 0)
{
lData = atol(lbuf); // converting char* to long
}
This does not work. lData is not 255 as i expect
How do I convert char* to long when reading the binary data?
Thanks and Regards,
Shalaka
No.1 | | 689 bytes |
| 
Shalaka Joshi wrote:
Hi,
I have binary file say, "test.bin". I write "FF" in the file and expect
my code to read 255 for me.
char * lbuf;
int lreadBytes ;
long lData;
FILE *pFile = fopen ("c:\\testbin","rb");
// Read data from binary file
lreadBytes = fread(lbuf,1 ,1,pFile);
if(lreadBytes!= 0)
{
lData = atol(lbuf); // converting char* to long
}
What do you think is in lbuf[0] at this point [provided it pointed
somewhere valid]?
Also where does lbuf point? This isn't a valid code snippet.
What is actually in the file? The byte 0xFF or the ASCII characters
FF?
Tom
No.2 | | 918 bytes |
| 
Hi,
thanks for ur response
lbuf reads the value correctly and shows me the "ascii" code
corresponding to "ff" .
In file I have 0xFF and not the ASCII FF.
Best Regards,
Shal
Tom St Denis wrote:
Shalaka Joshi wrote:
Hi,
I have binary file say, "test.bin". I write "FF" in the file and expect
my code to read 255 for me.
char * lbuf;
int lreadBytes ;
long lData;
FILE *pFile = fopen ("c:\\testbin","rb");
// Read data from binary file
lreadBytes = fread(lbuf,1 ,1,pFile);
if(lreadBytes!= 0)
{
lData = atol(lbuf); // converting char* to long
}
What do you think is in lbuf[0] at this point [provided it pointed
somewhere valid]?
Also where does lbuf point? This isn't a valid code snippet.
What is actually in the file? The byte 0xFF or the ASCII characters
FF?
Tom
No.3 | | 1953 bytes |
| 
"Shalaka Joshi" <Jshalaka@gmail.comwrites:
Hi,
I have binary file say, "test.bin". I write "FF" in the file and expect
my code to read 255 for me.
If you write "FF" into the file why do you expect the value to be 255?
It may be 255 if you write 0xff into the file. "FF" probably means two
bytes, each one being equal to the character code of 'F'.
char * lbuf;
int lreadBytes ;
long lData;
FILE *pFile = fopen ("c:\\testbin","rb");
// Read data from binary file
lreadBytes = fread(lbuf,1 ,1,pFile);
You read into the memory location lbuf points to, but you haven't
allocated lbuf so you may not be allowed to write there.
If you read only one character and don't want to be bothered with
malloc then I suggest you declare lbuf as:
char lbuf
and read into &lbuf.
if(lreadBytes!= 0)
{
lData = atol(lbuf); // converting char* to long
}
atol needs a string. What you provide (beside not being allocated) is
also not-null terminated so it's not a string. Even if it was correct,
atol returns the value of the number represented by the string, so, if
the string is "34512", atol would return the long 34512. In your case
F is not a long, and if you used 0xFF (which is a number not a string)
then your value would be the (probably ASCII) character corresponding
to 255 and not the string "255".
This does not work. lData is not 255 as i expect
How do I convert char* to long when reading the binary data?
Also, char is signed and 255 may well be out of its range (considering
x86 with char between -127 and 127).
It depends how you want to convert char * to long. You can convert the
value of a pointer to an int and cast that value to long (probably not
what you want) and, if char * refers to a string, then you can use
atol (but you are messing things up above).
No.4 | | 2541 bytes |
| 
Sorry this is just a snapshot of the code. I have allocated memory to
lbuf.
well, I have 0xff into the file. So the value is 255.
I know atol is not working here, but my question is, I have a binary
file which has 0xff in it. When I read the file it reads ascii code in
lbuf (of type char*) corresponding to "0xff ".
Now if I have a variable of type long which I want to assign the value
255. How do I extract lbuf value into my variable?
Nelu wrote:
"Shalaka Joshi" <Jshalaka@gmail.comwrites:
Hi,
I have binary file say, "test.bin". I write "FF" in the file and expect
my code to read 255 for me.
If you write "FF" into the file why do you expect the value to be 255?
It may be 255 if you write 0xff into the file. "FF" probably means two
bytes, each one being equal to the character code of 'F'.
--
char * lbuf;
int lreadBytes ;
long lData;
FILE *pFile = fopen ("c:\\testbin","rb");
// Read data from binary file
lreadBytes = fread(lbuf,1 ,1,pFile);
You read into the memory location lbuf points to, but you haven't
allocated lbuf so you may not be allowed to write there.
If you read only one character and don't want to be bothered with
malloc then I suggest you declare lbuf as:
char lbuf
and read into &lbuf.
>
>
>
if(lreadBytes!= 0)
{
lData = atol(lbuf); // converting char* to long
}
atol needs a string. What you provide (beside not being allocated) is
also not-null terminated so it's not a string. Even if it was correct,
atol returns the value of the number represented by the string, so, if
the string is "34512", atol would return the long 34512. In your case
F is not a long, and if you used 0xFF (which is a number not a string)
then your value would be the (probably ASCII) character corresponding
to 255 and not the string "255".
>
>
>
This does not work. lData is not 255 as i expect
How do I convert char* to long when reading the binary data?
Also, char is signed and 255 may well be out of its range (considering
x86 with char between -127 and 127).
It depends how you want to convert char * to long. You can convert the
value of a pointer to an int and cast that value to long (probably not
what you want) and, if char * refers to a string, then you can use
atol (but you are messing things up above).
No.5 | | 1554 bytes |
| 
2006-07-14, Shalaka Joshi <Jshalaka@gmail.comwrote:
Tom St Denis wrote:
>Shalaka Joshi wrote:
>Hi,
>>
>I have binary file say, "test.bin". I write "FF" in the file and expect
>my code to read 255 for me.
>>
>char * lbuf;
>int lreadBytes ;
>long lData;
>>
>FILE *pFile = fopen ("c:\\testbin","rb");
>>
>// Read data from binary file
>lreadBytes = fread(lbuf,1 ,1,pFile);
>>
>if(lreadBytes!= 0)
>{
>lData = atol(lbuf); // converting char* to long
>}
>>
>What do you think is in lbuf[0] at this point [provided it pointed
>somewhere valid]?
>>
>Also where does lbuf point? This isn't a valid code snippet.
>>
>What is actually in the file? The byte 0xFF or the ASCII characters
>FF?
>>
>
Hi,
thanks for ur response
lbuf reads the value correctly and shows me the "ascii" code
corresponding to "ff" .
In file I have 0xFF and not the ASCII FF.
Don't top post. I've fixed it here.
lbuf is most certainly not reading the value correctly, even though
you may think that it is.
You need to allocate memory before you use it.
No.6 | | 3524 bytes |
| 
2006-07-14, Shalaka Joshi <Jshalaka@gmail.comwrote:
Nelu wrote:
>"Shalaka Joshi" <Jshalaka@gmail.comwrites:
>>
>Hi,
>>
>I have binary file say, "test.bin". I write "FF" in the file and expect
>my code to read 255 for me.
>>
>If you write "FF" into the file why do you expect the value to be 255?
>It may be 255 if you write 0xff into the file. "FF" probably means two
>bytes, each one being equal to the character code of 'F'.
>>
>>
>char * lbuf;
>int lreadBytes ;
>long lData;
>>
>FILE *pFile = fopen ("c:\\testbin","rb");
>>
>// Read data from binary file
>lreadBytes = fread(lbuf,1 ,1,pFile);
>>
>You read into the memory location lbuf points to, but you haven't
>allocated lbuf so you may not be allowed to write there.
>If you read only one character and don't want to be bothered with
>malloc then I suggest you declare lbuf as:
>>
>char lbuf
>>
>and read into &lbuf.
>>
>>
>>
>if(lreadBytes!= 0)
>{
>lData = atol(lbuf); // converting char* to long
>}
>>
>atol needs a string. What you provide (beside not being allocated) is
>also not-null terminated so it's not a string. Even if it was correct,
>atol returns the value of the number represented by the string, so, if
>the string is "34512", atol would return the long 34512. In your case
>F is not a long, and if you used 0xFF (which is a number not a string)
>then your value would be the (probably ASCII) character corresponding
>to 255 and not the string "255".
>>
>>
>>
>This does not work. lData is not 255 as i expect
>How do I convert char* to long when reading the binary data?
>>
>Also, char is signed and 255 may well be out of its range (considering
>x86 with char between -127 and 127).
>>
>It depends how you want to convert char * to long. You can convert the
>value of a pointer to an int and cast that value to long (probably not
>what you want) and, if char * refers to a string, then you can use
>atol (but you are messing things up above).
>>
>
Sorry this is just a snapshot of the code. I have allocated memory to
lbuf.
well, I have 0xff into the file. So the value is 255.
I know atol is not working here, but my question is, I have a binary
file which has 0xff in it. When I read the file it reads ascii code in
lbuf (of type char*) corresponding to "0xff ".
Now if I have a variable of type long which I want to assign the value
255. How do I extract lbuf value into my variable?
1) Stop topposting.
2) your file in notepad or whatever your text editor is and paste
it into your message. We would like to see the contents of this file.
3) Allocate memory for lbuf. You've been told this twice by my count.
No.7 | | 3764 bytes |
| 
"Shalaka Joshi" <Jshalaka@gmail.comwrote in message
news:1152897087.145502.168680@
Sorry this is just a snapshot of the code. I have allocated memory to
lbuf.
well, I have 0xff into the file. So the value is 255.
I know atol is not working here, but my question is, I have a binary
file which has 0xff in it. When I read the file it reads ascii code in
lbuf (of type char*) corresponding to "0xff ".
Now if I have a variable of type long which I want to assign the value
255. How do I extract lbuf value into my variable?
>
>
>
>
>
>
Nelu wrote:
>"Shalaka Joshi" <Jshalaka@gmail.comwrites:
>>
>Hi,
>>
>I have binary file say, "test.bin". I write "FF" in the file and expect
>my code to read 255 for me.
>>
>If you write "FF" into the file why do you expect the value to be 255?
>It may be 255 if you write 0xff into the file. "FF" probably means two
>bytes, each one being equal to the character code of 'F'.
>>
>>
>char * lbuf;
>int lreadBytes ;
>long lData;
>>
>FILE *pFile = fopen ("c:\\testbin","rb");
>>
>// Read data from binary file
>lreadBytes = fread(lbuf,1 ,1,pFile);
>>
>You read into the memory location lbuf points to, but you haven't
>allocated lbuf so you may not be allowed to write there.
>If you read only one character and don't want to be bothered with
>malloc then I suggest you declare lbuf as:
>>
>char lbuf
>>
>and read into &lbuf.
>>
>>
>>
>if(lreadBytes!= 0)
>{
>lData = atol(lbuf); // converting char* to long
>}
>>
>atol needs a string. What you provide (beside not being allocated) is
>also not-null terminated so it's not a string. Even if it was correct,
>atol returns the value of the number represented by the string, so, if
>the string is "34512", atol would return the long 34512. In your case
>F is not a long, and if you used 0xFF (which is a number not a string)
>then your value would be the (probably ASCII) character corresponding
>to 255 and not the string "255".
>>
>>
>>
>This does not work. lData is not 255 as i expect
>How do I convert char* to long when reading the binary data?
>>
>Also, char is signed and 255 may well be out of its range (considering
>x86 with char between -127 and 127).
>>
>It depends how you want to convert char * to long. You can convert the
>value of a pointer to an int and cast that value to long (probably not
>what you want) and, if char * refers to a string, then you can use
>atol (but you are messing things up above).
>>
>--
>Ioan - Ciprian Tandau
>tandau _at_ freeshell _dot_ org (hope it's not too late)
>( and that it still works)
>
Assuming you fix up the code so that it properly allocates the buffer, etc.,
and you do read the contents in, you can get the integer value using a
simple cast.
For example:
unsigned char c = 0xff;
long i = (long)x;
No.8 | | 386 bytes |
| 
"Fred Kleinschmidt" <fred.l.kleinmschmidt@boeing.comwrites:
[]
Assuming you fix up the code so that it properly allocates the buffer, etc.,
and you do read the contents in, you can get the integer value using a
simple cast.
For example:
unsigned char c = 0xff;
long i = (long)x;
The cast isn't necessary:
unsigned char c = 0xff;
long i = x;