On Nov 25, 2011, at 1:58 PM, Koen van der Drift wrote:

> I'm trying to implement the following code into my Cocoa project:
> 
> for (n = 0 ; n < (2 * count) ; n++)
> {
>       ((u_int32_t *) result)[n] = ntohl((u_int32_t) ((u_int32_t *) 
> decoded)[n]);
> }
> 
> with the following requirements:
> 
> // byte order correction decoded has network byte order data
> // result has the byte order of the host machine
> 
> decoded is an NSData object after base64 decoding.
> 
> How do I obtain the "network byte order data" and "byte order of the host 
> machine" so I get the correct results?

Network byte order data is always big-endian. The byte order of the host 
machine varies depending on the CPU architecture. The preprocessor macro 
__BIG_ENDIAN__ is always defined on big-endian architectures (e.g. PowerPC), 
and __LITTLE_ENDIAN__ on little-endian architectures (e.g. X86), but I think 
what you want to do here is just use the ntoh family of functions as you are 
doing above, because they will return the correct byte order for the host 
machine. IOW, they just return the number passed as arguments to them on 
big-endian CPUs, and they return a reversed byte order number on little-endian 
CPUs.

Nick Zitzmann
<http://www.chronosnet.com/>

_______________________________________________

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]

Reply via email to