Если вы действительно хотите, чтобы извлечь отдельные байты первых:
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
представляют собой зависимость от архитектуры ЦП.
Десятичный, восьмеричный, шестнадцатеричный или двоичный? – 2008-10-07 18:02:42
Ваш вопрос и заголовок кажутся странными, и оба они менее точные. Можете ли вы повторить для большей ясности? – dmckee 2008-10-07 18:14:11
Это кажется очень хрупким в международном контексте с unicode, где один символ на самом деле является кратным байтом ... – 2008-10-07 18:28:10