Re: IDL XDR Problem [message #9534 is a reply to message #9444] |
Mon, 07 July 1997 00:00  |
jackel[1]
Messages: 11 Registered: May 1997
|
Junior Member |
|
|
In article <33C09104.41C6@bom.gov.au> Justin Baker <justinb@bom.gov.au> writes:
> I've got a problem with IDL when reading XDR data generated by a C
> program.
> I can happily read in longs or floats, but IDL gives a strange error
> when I try and read in strings.
Unfortunately, IDL seems to define XDR strings in a peculiar way.
According to the IRIX Network Communications Guide, a string should
have a 4-byte field which gives the length, followed by the string
contents, then enough padding zeros to give a length which is a multiple
of four bytes. Consequently, the string "abcde" would be written (in hex)
as
00 00 00 05 61 62 63 64 65 00 00 00
However, according to the IDL users guide "The length of strings is saved
and restored along with the string". What they seem to mean by this is that
the string length is written _twice_, so "abcde" would be
00 00 00 05 00 00 00 05 61 62 63 64 65 00 00 00
This means that you can't read a standard XDR string in as an IDL string.
You'll need to do some kludge like reading it in as a variable length
byte array (padded to a multiple of four bytes) , then converting it to a
string. Some longword swapping may be required, it's been a while
since I ran across this, and the details are a bit fuzzy. Good luck.
Brian Jackel
|
|
|