[sclug] C programming question

Paul Vanlint paul at polyzing.com
Sat Oct 25 09:05:39 UTC 2003


Looking at the patterns in the binary file, it looks like the object
size is 24 bytes, not 20. Therefore, I would expect that all 3 values
are stored as 8 byte floating point values. It looks like the values are
not stored in intel native byte order, so you will have to do some
bytewise manipulation.

Regards,

Paul.

On Wed, 2003-05-14 at 13:31, Andy Arbon wrote:
> Hello All,
> 
> I'm helping a mate with some C programming, but I'm not exactly a guru 
> myself, and I'm a bit puzzled by a problem I'm hitting.
> 
> I have the two (hopefully attached) files. primary is a binary datafile, 
> showpri.c is code that should read it and display it.
> 
> The problem is that when it runs it displays a load of rubbish (couple 
> of lines quoted below). The data is supposed to be from a radar, to give 
> you some context. This means that negative range readings and enourmous 
> bearing angles are unlikely to be correct.
> 
> Can anyone tell me what's wrong with it? The datafile was probably 
> produced on Windows and I'm running the code on Linux - is there any 
> difference in the file I/O between the two that could account for this?
> 
> My primitive C skills say that the code is all OK, so I'm wondering if 
> it's one of those little-known-quirks type problems that I don't know about.
> 
> Cheers,
> 
> Andy
> 
> 
> No    Bearing   Range   Elevation
>                  gates   angle
> 
>   0      0.00 -468385792 
> -55110200796620348782678121158369662643176976710747638795560799680278459353800660385130122328779655190693409370583986398835662809115595762201875119174608240120998180441773247588543284002479767346363033550840450276533526613437365216370830106013827317366784.00
>   1 
> -2455544853178971674289851995617191448574354884249111904001649611314200044146899645249402763284588804731320539751053705006499732417900275538546655130161117199547540475922883677417643818432444060842133923317080445211881221602608843331235454762672774893243727872.00 
> 693931970     0.00
>   2 
> -4595439111720835063429696069900271515748711667122921690954915206811221122299244731744488821650207505385429718223311723033906026247221561277238617850822122516047132539752890427557340846831506266615089350927552012494376770877053668259825471476203520.00 
> 1373139520     0.00
>   3      0.00 130856089 
> 738736861112548861520159808165694704305033116502771810580283294354315112429196171915550913685051865729637092309807682764544149377460994048.00
>   4      0.00 -2107633344    -0.00
> 
> ----
> 

> /************************************************************
> 	SHOW PRIMARY DATA
> 
> 	Author  T G Morgan
> 	Date    16 Feb 2001
> 	Issue   1
> 
> 	This program displays the contents of the file
> 	'primary' used in the Plot Association assignment.
> ************************************************************/
> 
> #include <stdio.h>
> 
> int main()
> {
> /*	'plots' is an array into which the structures on the
> 	file are read before being displayed               */
> 
> 	struct primary_plot {
> 		double   bearing;
> 		int      range;
> 		double   elevation;
> 	};
> 	typedef struct primary_plot PLOT;
> 	PLOT  plots[25];
> 
> 	int      i=0, n, total;
> 	FILE    *fp;
> 
> /*	Read one structure at a time from the file. fread
> 	returns the number of structures actually read and
> 	this value is placed in n. As long as there is still
> 	data in the file, n will be 1. When the end of the
> 	file is reached, no further structure will be read,
> 	so n will be given a value of 0. This terminates the
> 	loop.                                                */
> 
> 	fp = fopen("primary", "rb");
> 	do
> 	{
> 		n = fread(&plots[i], sizeof(PLOT), 1, fp);
> 		i++;
> 	}
> 	while (n == 1);
> 
> 	fclose(fp);
> 	total = i-1;
> 
> /*	The table of plots is now printed to stdout          */
> 	     
> 	printf ("\n\nNo    Bearing   Range   Elevation\n");
> 	printf ("                gates   angle\n"); 
> 
> 	for (i=0; i<total; i++)
> 	  printf("\n%2d %9.2lf %7d  %7.2lf",i, plots[i].bearing, plots[i].range ,plots[i].elevation ) ;
> 	printf ("\n\n"); 
> 	return 0;
> }
> 





More information about the Sclug mailing list