473,402 Members | 2,072 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,402 software developers and data experts.

writing 0x0A to a bin file without having it automatically write 0x0D

This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?

Thanks....

Mar 13 '06 #1
15 6249
MC*******@gmail.com writes:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?


You need to open the file in "binary" mode, e.g.

tmp_ifp = fopen("tmp_name.bin", "wb");
--

John Devereux
Mar 13 '06 #2
MC*******@gmail.com writes:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");


Use binary mode: "wb" instead of "w".
--
"When in doubt, treat ``feature'' as a pejorative.
(Think of a hundred-bladed Swiss army knife.)"
--Kernighan and Plauger, _Software Tools_
Mar 13 '06 #3
On 2006-03-13, MC*******@gmail.com <MC*******@gmail.com> wrote:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?

Thanks....


I think these routines can convert 0xa to a system defined
line terminator : which I guess in your case is 0xD,0xA.

Check the options which can follow "w" in your fopen : b or t might
help if memory serves correctly. Since you talk about "bin" file then
"wb" might be your man.
Mar 13 '06 #4
On 2006-03-13, MC*******@gmail.com <MC*******@gmail.com> wrote:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
"wb".
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?

Thanks....

Mar 13 '06 #5
On 2006-03-13, Richard G. Riley <rg****@gmail.com> wrote:
On 2006-03-13, MC*******@gmail.com <MC*******@gmail.com> wrote:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?

Thanks....


I think these routines can convert 0xa to a system defined
line terminator : which I guess in your case is 0xD,0xA.

Check the options which can follow "w" in your fopen : b or t might
help if memory serves correctly. Since you talk about "bin" file then
"wb" might be your man.


t is not standard C<OT>, and where it is used, it means text mode</OT>.
Mar 13 '06 #6
On 13 Mar 2006 14:03:44 -0800, MC*******@gmail.com wrote:
This is probably a common problem, but as a novice programmer I'm
trying to figure out how to write 0x0A to a BIN file without having it
automatically write 0x0D. Here's an example of the code:
tmp_ifp = fopen("tmp_name.bin", "w");
fprintf(tmp_ifp, "%c", 0x0A);

When I open the tmp_name.bin file with a hex editor you notice that
both 0x0D and 0x0A are written. I tried using fwrite, but the same
thing occurs. Any ideas?


You opened the file in text mode. Therefore, it is not a binary file,
regardless of what the three character extension is. If you want to
process the file in binary mode, open it binary mode.

For additional insurance, don't use fprintf. Use fwrite.
Remove del for email
Mar 14 '06 #7
In article <bd********************************@4ax.com>,
Barry Schwarz <sc******@doezl.net> wrote:
For additional insurance, don't use fprintf. Use fwrite.


Huh? How can these be different?

-- Richard
Mar 14 '06 #8
Thanks....I opened it with "wb" and it worked. I'm surprised that just
using "w" wouldn't. Why would you want to act on the data being
written to a file in that manner? Doesn't make sense. If someone
wanted a new line then they would just put "\n".
Thanks everyone else for your help too!

Mar 14 '06 #9
MikeC_EE99 wrote:
Thanks....I opened it with "wb" and it worked. I'm surprised that just
using "w" wouldn't. Why would you want to act on the data being
written to a file in that manner?
So that you write the correct data.
Doesn't make sense.
Does.
If someone wanted a new line then they would just put "\n".


But in a /file/, on some OSs incl Windows, a new line is represented
as \r\n, not just \n. So, for /text streams/, the C library converts
\r\n on input to \n, and \n on output to \r.

If you don't want that to happen, you're not writing a text stream,
so you have to tell C that you want a "binary" file.

--
Chris "sparqling" Dollin
"Who do you serve, and who do you trust?"
Mar 14 '06 #10
On 2006-03-14, MikeC_EE99 <MC*******@gmail.com> wrote:
Thanks....I opened it with "wb" and it worked. I'm surprised that just
using "w" wouldn't. Why would you want to act on the data being
written to a file in that manner? Doesn't make sense. If someone
wanted a new line then they would just put "\n".
Thanks everyone else for your help too!


Different OSs terminate text lines with different combinations."b"
tells the routine to put what you want, not what the file "convention"
is on that system
Mar 14 '06 #11
On 14 Mar 2006 14:04:28 GMT, ri*****@cogsci.ed.ac.uk (Richard Tobin)
wrote:
In article <bd********************************@4ax.com>,
Barry Schwarz <sc******@doezl.net> wrote:
For additional insurance, don't use fprintf. Use fwrite.


Huh? How can these be different?

fprintf is going to "massage" the format string, making the
"appropriate" substitutions for every conversion specification. As a
Windows system specific implementation detail, this massaging also
appears to include converting \n to \n\r (or is it \r\n). That this
happens on text files is obvious. I don't know whether it also
happens on binary files but fwrite definitely performs no such
massaging. Hence the phrase about insurance.
Remove del for email
Mar 14 '06 #12
In article <ui********************************@4ax.com>,
Barry Schwarz <sc******@doezl.net> wrote:
fprintf is going to "massage" the format string, making the
"appropriate" substitutions for every conversion specification. As a
Windows system specific implementation detail, this massaging also
appears to include converting \n to \n\r (or is it \r\n). That this
happens on text files is obvious. I don't know whether it also
happens on binary files but fwrite definitely performs no such
massaging. Hence the phrase about insurance.


I don't have a Windows machine to test it on, but I can see nothing in
the standard to justify this behaviour. The conversion of characters
is controlled by the stream type, which is in turn controlled by the
"b" flag to fopen(), not by the choice of fprintf() or fwrite().

-- Richard
Mar 14 '06 #13
On 2006-03-14, Barry Schwarz <sc******@doezl.net> wrote:
On 14 Mar 2006 14:04:28 GMT, ri*****@cogsci.ed.ac.uk (Richard Tobin)
wrote:
In article <bd********************************@4ax.com>,
Barry Schwarz <sc******@doezl.net> wrote:
For additional insurance, don't use fprintf. Use fwrite.
Huh? How can these be different?

fprintf is going to "massage" the format string, making the
"appropriate" substitutions for every conversion specification. As a
Windows system specific implementation detail, this massaging also
appears to include converting \n to \n\r (or is it \r\n).


It is not printf that does this. It is putc, which is called [or as if
it is called] by every other output function. \n is not a conversion
specification.
That this happens on text files is obvious. I don't know whether it
also happens on binary files but fwrite definitely performs no such
massaging.
It is self-evident that it does, on text files. An implementation where
the output caused by fwrite is not as if putc were called in a loop is
non-conforming.
Hence the phrase about insurance.

Mar 14 '06 #14
On 2006-03-14, MikeC_EE99 <MC*******@gmail.com> wrote:
Thanks....I opened it with "wb" and it worked. I'm surprised that just
using "w" wouldn't. Why would you want to act on the data being
written to a file in that manner?
Compatibility with text files used by other programs on the platform,
some of which may not be written in C.
Doesn't make sense. If someone wanted a new line then they would just
put "\n". Thanks everyone else for your help too!

Mar 14 '06 #15
Barry Schwarz <sc******@doezl.net> writes:
On 14 Mar 2006 14:04:28 GMT, ri*****@cogsci.ed.ac.uk (Richard Tobin)
wrote:
In article <bd********************************@4ax.com>,
Barry Schwarz <sc******@doezl.net> wrote:
For additional insurance, don't use fprintf. Use fwrite.


Huh? How can these be different?

fprintf is going to "massage" the format string, making the
"appropriate" substitutions for every conversion specification. As a
Windows system specific implementation detail, this massaging also
appears to include converting \n to \n\r (or is it \r\n). That this
happens on text files is obvious. I don't know whether it also
happens on binary files but fwrite definitely performs no such
massaging. Hence the phrase about insurance.


#if USE_FWRITE
fwrite("hello, world\n", 1, strlen("hello, world\n"), stream);
#else
fprintf(stream, "hello, world\n");
#endif

If the data written to "stream" differs depending on whether
USE_FWRITE is defined, then the implementation of either fwrite() of
fprintf() is broken. Both are equivalent to a sequence of calls to
fputc(). Both will translate '\n' to a system-specific end-of-line
representation if stream is opened in text mode; neither will do so if
stream is opened in binary mode.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Mar 14 '06 #16

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Jean-Gael GRICOURT | last post by:
I am trying to use ostringstream in binary mode. Why the value (0x0A) is automatically replaced by (0x0D,0x0A) in the output ? Is there a workaround to this issue ? -------- my snippet code...
4
by: phantom | last post by:
Hi All. I am having a problem writing to a file. I can successfully open the file and write the contents using fprintf, however if the writing is not done for a while in the process the file...
2
by: melanieab | last post by:
Hi, I'm trying to store all of my data into one file (there're about 140 things to keep track of). I have no problem reading a specific string from the array file, but I wasn't sure how to...
6
by: dast | last post by:
Hello, I’m having trouble writing the contents of a dataset to a csv file. I have made a solution that loops through the rows in the dataset, but it’s too slow. There must be a faster and...
12
by: Chris Springer | last post by:
I'd like to get some feedback on the issue of storing data out to disk and where to store it. I've never been in a production environment in programming so you'll have to bear with me... My...
1
by: lactaseman | last post by:
While I know this is not the correct venue... I realize this is of little to no importance to most out there... however, if I had found this in my initial searches, I would have used this. So, as...
6
by: bonk | last post by:
I am trying to create a stream that writes text to a file and: - automatically creates a new file once the current file exceeds a certain size - makes it possible to be used by multiple threads...
3
by: Vivienne | last post by:
I am using VS 2005. In a project when I was trying to write some unsigned char into a file, I used fwrite() and fputc(). But I found whenever I tried to write 0x0a, fwrite() function automaticly...
2
by: MAx | last post by:
Hi guys, I am a c++ newbee and i am trying to write a file to a default printer. Please have a look at the code below and let me know if it'll work. I know that similar code in C will work. I...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.