10-29-2004
Yeah, you can.
Say you have a struct variable named s. You could simply write/read from ((void*)&s) to (((void*)&s) + sizeof s) using whatever I/O functions. But there are 2 problems with that.
1) Some compilers will produce code that use "sparse" structs. structs with holes in them, that is. This is to make the code faster. Memory accesses that is aligned at some power of 2 multiple is usually faster, for example. If the compiler or compiler settings were to change, the sparseness may change too and old data files would become incompatible.
2) This method will create data files that are architecture-dependent. Fundamental C types, like pointers, ints, floats, etc, won't read/write the same on different architecture. So the data files will not be portable.
So it would be better to encode your data in a standard way. There are a few ways to do that:
1) Just read/write your stuff using ASCII printable chars. You could use scanf(3)/printf(3) for that.
2) Check xdr(3) (eXternal Data Representation); that's what is used for rpc(3) (Remote Procedure Call). It can encode/decode your stuff automatically.
3) Use some library that uses XML format. That's the current hype.
10 More Discussions You Might Find Interesting
1. Programming
I receive an integer as argument for a function.
within function definition i want it to be of type struct tm.
eg..
main()
{
int a;
......
}
function(...,..,a,..)
int a;
{
struct tm tm;
if(!a)
^ time(&a);
^ ... (4 Replies)
Discussion started by: bankpro
4 Replies
2. Programming
in my .c file i have a struct atop of the program defined as follows:
#define MAX 10
int curtab;
static struct tab {
int count;
int use;
} tab;
with the initial function following it like so:
int tab_create(int init_count)
{
int i;
for(i=0; i < MAX; i++)
{... (1 Reply)
Discussion started by: micmac700
1 Replies
3. Linux
Hi,
I am working on gcov.Meaning, analysing the functionality of gcov. There is one structure called "struct bb". I am not sure, how struct bb members are getting assigned values. If anyone knows how it is happening pls let me know.
Thanks in advance.
--Vichu (0 Replies)
Discussion started by: Vichu
0 Replies
4. Shell Programming and Scripting
hi there !
i have exactly the same problem like this guy here
https://www.unix.com/shell-programming-scripting/127668-getting-curl-output-verbose-file.html
i am not able to save the curl verbose output..
the sollution in this thread (redirecting stderr to a file) does not work for me.... (0 Replies)
Discussion started by: crabmeat
0 Replies
5. UNIX for Dummies Questions & Answers
Can someone tell me how to do this?
Just a thought that entered my mind when learning about structs.
First thought was:
struct one
{
struct two;
}
struct two
{
three;
}
one->two->three
would this be how you would access "three"? (1 Reply)
Discussion started by: unbelievable21
1 Replies
6. Programming
in C i am using this code to get the c time or a time or m time
struct dirent *dir;
struct stat my;
stat(what, &my);
thetime = my.st_ctime;
How can i check if i have permission to check the c time of the file? (1 Reply)
Discussion started by: omega666
1 Replies
7. UNIX for Dummies Questions & Answers
what is struct winsize used for?
i tried looking it up, but no luck. (0 Replies)
Discussion started by: l flipboi l
0 Replies
8. Programming
Hi,
I have received an application that stores some properties in a file. The existing struct looks like this:
struct TData
{
UINT uSizeIncludingStrings;
// copy of Telnet data struct
UINT uSize;
// basic properties:
TCHAR szHost; //defined in Sshconfig
UINT iPortNr;
TCHAR... (2 Replies)
Discussion started by: Powerponken
2 Replies
9. Programming
I have many headers with huge amount of structures in them, typical one looks like this:
$ cat a.h
struct Rec1 {
int f1;
int f2;
};
struct Rec2 {
char r1;
char r2;
};
struct Rec3 {
int f1;
float k1;
float ... (6 Replies)
Discussion started by: migurus
6 Replies
10. Shell Programming and Scripting
I am trying to modify the "corestat v1.1" code which is in Perl.The typical output of this code is below:
Core Utilization
CoreId %Usr %Sys %Total
------ ----- ----- ------
5 4.91 0.01 4.92
6 0.06 ... (0 Replies)
Discussion started by: Zam_1234
0 Replies
LEARN ABOUT MOJAVE
uuencode
uuencode(n) Text encoding & decoding binary data uuencode(n)
__________________________________________________________________________________________________________________________________________________
NAME
uuencode - UU-encode/decode binary data
SYNOPSIS
package require Tcl 8
package require uuencode ?1.1.4?
::uuencode::encode string
::uuencode::decode string
::uuencode::uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)
::uuencode::uudecode (-file filename | ?--? string)
_________________________________________________________________
DESCRIPTION
This package provides a Tcl-only implementation of the uuencode(1) and uudecode(1) commands. This encoding packs binary data into printable
ASCII characters.
::uuencode::encode string
returns the uuencoded data. This will encode all the data passed in even if this is longer than the uuencode maximum line length. If
the number of input bytes is not a multiple of 3 then additional 0 bytes are added to pad the string.
::uuencode::decode string
Decodes the given encoded data. This will return any padding characters as well and it is the callers responsibility to deal with
handling the actual length of the encoded data. (see uuencode).
::uuencode::uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)
::uuencode::uudecode (-file filename | ?--? string)
UUDecode a file or block of data. A file may contain more than one embedded file so the result is a list where each element is a
three element list of filename, mode value and data.
OPTIONS
-filename name
Cause the uuencode or uudecode commands to read their data from the named file rather that taking a string parameter.
-name string
The uuencoded data header line contains the suggested file name to be used when unpacking the data. Use this option to change this
from the default of "data.dat".
-mode octal
The uuencoded data header line contains a suggested permissions bit pattern expressed as an octal string. To change the default of
0644 you can set this option. For instance, 0755 would be suitable for an executable. See chmod(1).
EXAMPLES
% set d [uuencode::encode "Hello World!"]
2&5L;&\@5V]R;&0A
% uuencode::uudecode $d
Hello World!
% set d [uuencode::uuencode -name hello.txt "Hello World"]
begin 644 hello.txt
+2&5L;&@5V]R;&0`
`
end
% uuencode::uudecode $d
{hello.txt 644 {Hello World}}
BUGS, IDEAS, FEEDBACK
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category base64
of the Tcllib SF Trackers [http://sourceforge.net/tracker/?group_id=12883]. Please also report any ideas for enhancements you may have for
either package and/or documentation.
KEYWORDS
encoding, uuencode
CATEGORY
Text processing
COPYRIGHT
Copyright (c) 2002, Pat Thoyts
base64 1.1.4 uuencode(n)