PDA

View Full Version : Converting a number to IEEE Extended




neil.b
Jan 15, 2009, 04:18 PM
I'm trying to read/write sample rate information from AIFF files and came across these two handy functions for converting to/from IEEE 80-bit Extended number format;

http://www.onicos.com/staff/iz/formats/ieee.c

However, when I use the function the numbers don't come out right. For example, the bytes for a 44100Hz sample is (if you read it in a hex editor);

40 0D AC 44 00 00 00 00 00 00

but if I use the ConvertToExtended function like this (I put the casts in just in case but it actually has no effect on the result);

ConvertToIeeeExtended((double)44100, (char *)byteBuffer);


and then read the numbers stored in byteBuffer I get;

40 0E AC 44 00 00 00 00 00 00


Now I only vaguely understand the conversion process so I'm having a hard time working through the function to find out why it's not coming out correct. Can anyone decode the function (in the link) and suggest why, maybe, it won't work in Objective-C? I copy-and-pasted it straight into my code and it compiles fine.

Or alternatively, is there a way of working with IEEE 80-bit Extended numbers in the iPhone API? :)

Thanks,

Neil



neil.b
Jan 15, 2009, 05:17 PM
Might have answered my own question. If you use a "double long" you can use a (char *) to access the first 10 bytes and it gives you the correct result, in reverse order.

As for the "error" I was seeing, it was in fact correct (so the function I found and linked to actually works too) - for some reason the audio properties of the file were being reported incorrectly in the sound editor I was using. Doh!