From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,2aaba1527862ef22 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!postnews.google.com!j27g2000cwj.googlegroups.com!not-for-mail From: "frikk" Newsgroups: comp.lang.ada Subject: Re: Reading Float Data from a binary file into ada Date: 31 Jan 2007 06:12:56 -0800 Organization: http://groups.google.com Message-ID: <1170252776.235803.122220@j27g2000cwj.googlegroups.com> References: <1170172307.292500.256090@m58g2000cwm.googlegroups.com> NNTP-Posting-Host: 12.129.98.129 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-Trace: posting.google.com 1170252782 21410 127.0.0.1 (31 Jan 2007 14:13:02 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Wed, 31 Jan 2007 14:13:02 +0000 (UTC) In-Reply-To: User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322),gzip(gfe),gzip(gfe) X-HTTP-Via: 1.1 TRY0PX01 Complaints-To: groups-abuse@google.com Injection-Info: j27g2000cwj.googlegroups.com; posting-host=12.129.98.129; posting-account=192wHg0AAAAzciSzoZsEBI9bw5pVCopO Xref: g2news2.google.com comp.lang.ada:8773 Date: 2007-01-31T06:12:56-08:00 List-Id: On Jan 30, 10:54 pm, "Steve" wrote: > "frikk" wrote in message > > news:1170172307.292500.256090@m58g2000cwm.googlegroups.com... > > > Hello everyone! I am having a problem that I would love some help > > with. > > > Essentially I was given a Visual Basic program that dumps a binary > > configuration file with all of the variables in a set. The variables > > are each 32 bit floats, with the first 16 bits being the integer part > > and the second 16 bits being a representation of the fraction (I'm not > > sure if this is stanard - but its just how VB dumps the data). The > > binary dump is basically a copy of the way VB stores the data in > > memory. I need to be able to use this data in ada. There is a C > > counterpart to this that makes use of a 'union' to grab the data 1 > > byte (8 bits) at a time, put them into a char array of size 4, then > > use a 32 bit float to reference the data. Is there somehow I can do > > this in ada as well? > > Your description of how the C counterpart works is inconsistant with the way > you have described the data format in the file. > > If the C program is using a union to view the data as either a float or a 4 > character array then it is very likely that the data is in fact stored in > IEEE 754 floating point format. If you are using Microsoft's C compiler > this is certainly the case. > > The following snippet contains the pieces you need to do the conversion. > > TYPE aByte IS MOD 256; > > FOR aByte'SIZE USE 8; > > TYPE aByteArray IS ARRAY( Positive RANGE <> ) OF aByte; > > PRAGMA PACK( aByteArray ); > > TYPE aFourBytes IS NEW aByteArray(1..4); > > FUNCTION Conv IS NEW Ada.Unchecked_Conversion( aFourBytes, float ); > > ... > > a : float; > b : aFourBytes; > > ... > > a := Conv( b ) > > Use unchecked conversion to convert from a type that contains 4 bytes to the > float value you're looking for. > > Regards, > Steve > (The Duck) > > > > > > > Basically I need to be able to read in the binary data byte by byte > > but store it into a 32 bit Float. The C union example above uses the > > same memory address for the Float as it does for the size 4 char > > array. I don't even know if the VB dump will correspond with the way > > ada handles floats or not, but I'll worry about that later. > > > I am also using Matlab/Simulink if that provides any additional tools > > to use for debugging. > > > Thank you for any help, > > Blaine- Hide quoted text - > > - Show quoted text - Thank you for the example code! I'll play around with this and see how it works. Yes, you are correct that the C code and the VB code don't seem to make sense. I'm going to verify that this C code does work exactly as we want it to. Thank you! Blaine