[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Не устою и я перед соблазном :-))
Есть несколько способов.
1) Сдвиги:
unsigned char least_significant_byte = (unsigned char)int_var;
unsigned char next_significant_byte = (unsigned char)(int_var>>8);
и т.д.
2) Объединения:
union TwoBytes
{
int word;
char bytes[2];
};
unsigned char least_significant_byte = ((union TwoBytes)int_var).bytes[0];
unsigned char next_significant_byte = ((union TwoBytes)int_var).bytes[1];
В этом примере важен порядок хранения байтов в памяти (least significant byte first или 'little endian' предполагается в этом примере, а вообще зависит от реализации).
3) Указатели:
unsigned char least_significant_byte = *(unsigned char*)&int_var;
unsigned char next_significant_byte = *(((unsigned char*)&int_var)+1);
В этом примере также важен порядок хранения байтов в памяти.
Первый способ применим только к int и long, поскольку у других типов сдвигов нет. Какой из способов сгенерирует более эффективный код - зависит от компилятора.
E-mail: info@telesys.ru