Если вы действительно хотите сначала извлечь отдельные байты:
unsigned char a = orig & 0xff;
unsigned char b = (orig >> 8) & 0xff;
unsigned char c = (orig >> 16) & 0xff;
unsigned char d = (orig >> 24) & 0xff;
Или:
unsigned char *chars = (unsigned char *)(&orig);
unsigned char a = chars[0];
unsigned char b = chars[1];
unsigned char c = chars[2];
unsigned char d = chars[3];
Или используйте объединение длинных без знака и четырех символов:
union charSplitter {
struct {
unsigned char a, b, c, d;
} charValues;
unsigned int intValue;
};
charSplitter splitter;
splitter.intValue = orig;
// splitter.charValues.a will give you first byte etc.
Обновление: как указал фриол, решения 2 и 3 не являются независимыми от порядка байтов; количество байтов a
, b
, c
и d
зависит от архитектуры процессора.