On Sat, 26 Nov 2011 16:23:47 -0800, Kyle Sluder said:
>> Since you're just doing a memcpy(), you can simply cast the bits and avoid
>> the copying. Try this:
>>
>> float f = *((float*) &res);
>>
>> Or try defining a C union:
>>
>> union foo { float f; u_int32_t u; };
>> union foo bar;
>> bar.u = CFSwapInt32HostToBig(value);
>> float f = bar.f;
>
>Neither of these is legal. You are not allowed to alias a pointer to
>two different types (except pointer-to-char). See Section 6.5,
>paragraph 7 of the C99 standard:
>http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
(My reply is late, but...)
Strangely, there is no CF version, but there is NSSwapBigDoubleToHost() and
variants, which are more expressive that the trickery above.
As Kyle says, don't cast float* to int* (or variations), you see everyone doing
it, but it's illegal. The union strategy is dubious too, but in practice
safer. Looking in NSByteOrder.h you see it is the technique used by
NSSwapBigDoubleToHost() and variants.
Cheers,
--
____________________________________________________________
Sean McBride, B. Eng [email protected]
Rogue Research www.rogue-research.com
Mac Software Developer Montréal, Québec, Canada
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]