Does it make a difference which one I use in objective-c (particularly on iOS)? I assume it comes from inheriting from C and its types, as well as inheriting the types from Mac OS, which iOS was based on, but I don’t know which one I should use:
unsigned char from…well..the compiler?
uint8_t from stdint.h
UInt8 from MacTypes.h
Byte from MacTypes.h
Bytef from zconf.h
I am aware that the various defs are for portability reasons, and using literals like unsigned char is not good future thinking (size might change, and things will end up like the Windows API again). I’d like some advice on how to spot the best ones for my uses. Or a good tongue lashing if I’m just being silly…
EDIT : Just for some more info, if I want something that will always be 1 byte, should I use uint8_t (doesn’t seem like it would change with a name like that)? I’d like to think UInt8 wouldn’t change either but I see that the definition of UInt32 varies on whether or not the processor is 64-bit.
FURTHER EDIT : When I say byte, I specifically mean that I want 8 bits. I am doing pixel compression operations (32 bits -> 8 bits) for disk storage.
It’s totally indifferent. Whichever you use, it will most probably end up being an
unsigned char. If you want it to look nice, though, I suggest you useuint8_tfrom<stdint.h>.Neither will change with the architecture.
charis always 1 byte as per the C standard, and it would be insupportable from a user’s point of view if in an implementation, UInt8 suddenly became 16 bits long.(It is not the case, however, that
charis required to be 8 bits wide, it’s only that if the name of a type suggest that it’s 8 bits long, then any sensible implementation does indeed typedefs it as such. Incidentally, a byte (whichcharis) is often an 8-bit unit, i. e. an octet.)