Я не тестировал на процессоре большого конца, но всегда ли это дает мне младший байт?Получение младшего значащего байта
int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
Я не тестировал на процессоре большого конца, но всегда ли это дает мне младший байт?Получение младшего значащего байта
int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
Да, это всегда даст вам младший байт. Спецификация C++ (§ 4.7/2) гарантирует, что сужение конверсий всегда отбрасывает наиболее значимые байты, возвращая наименьшее значение, сравнимое с исходным целым, по модулю 2 n, где n - количество бит в целевом типе.
Это не означает, что unsigned char
- это один байт. Все, что гарантировано, это то, что sizeof(char) == 1
. Однако, если вы рассматриваете байт как самый маленький блок памяти, способный удерживать символ, тогда это должно работать нормально.
Не работает ли следующее:
int i = 12345678;
unsigned char c = (i % 256);
или
int i = 12345678;
unsigned char c = (i & 255);
(мета) Если вы используете static_cast не следует отметить вопрос, как C. Я не буду повторно задать его, потому что я думаю, что лучше вы это делаете (так что вы узнаете тег -etiquette :-)) – xanatos