Hal Vaughan said:
> I have a series of codes that will include NULL bytes
Shhhhh, we're trying to sleep... NULL is a pointer. You mean null bytes,
right? i.e. '\0' rather than ((void *)0)
> and other non-text
> data that I need to send to a device through a file.
Not a problem.
> Since a NULL terminates a string, how do I send a string containing NULL
> bytes to a file (or device, depending on the OS)?
Don't use strings. For example, here's one way to send the bytes 00, 9E,
3A, 00, 00, 5F, CD, and FE to a file:
unsigned char buf[8] = { 0x00, 0x9E, 0x3A, 0x00, 0x00, 0x5F, 0xCD, 0xFE };
fwrite(buf, sizeof buf / sizeof buf[0], sizeof buf[0], fp);
Now let's send eight straight zeros to the same stream:
memset(buf, 0, sizeof buf / sizeof buf[0]);
fwrite(buf, sizeof buf / sizeof buf[0], sizeof buf[0], fp);
Now let's send a zero and three letter 'N's:
buf[0] = '\0'; /* not really necessary since we did it a couple of lines
up
*/
buf[1] = buf[2] = buf[3] = 'N';
fwrite(buf, 4, sizeof buf[0], fp);
See? It's easy really. Just stop thinking in terms of strings, and think
in
terms of raw data instead.
--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www.
+rjh@[EMAIL PROTECTED]
users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999


|