Я нашел этот ответ на аналогичный вопрос, где можно извлечь байт из более крупного типа. То, что я хотел бы знать, - что было бы наоборот этой процедуры при использовании значения индекса?
Чтобы извлечь байт от пользователя 32-битного типа Пит Уилсон дал следующее:
int a = (the_int >> 24) & 0xff; // high-order (leftmost) byte: bits 24-31
int b = (the_int >> 16) & 0xff; // next byte, counting from left: bits 16-23
int c = (the_int >> 8) & 0xff; // next byte, bits 8-15
int d = the_int & 0xff; // low-order byte: bits 0-7
Я бы хотел сделать обратное со значением индекса:
// assume int = 32bit or 4 bytes and unsigned char = 8bit or 1 byte
void insertByte( unsigned char a, unsigned int& value, unsigned idx ) {
// How to take byte and insert it into the byte position
// of value at idx where idx is [0-3] from the right
}
Вот пример по значению:
unsigned char a = 0x9D;
unsigned int value = 0;
insertByte( a, value, 0 ); // value = 0x0000009D;
insertByte( a, value, 1 ); // value = 0x00009D00;
insertByte( a, value, 2 ); // value = 0x009D0000;
insertByte( a, value, 3 ); // value = 0x9D000000;
// insertByte( a, value, >3 ); // invalid index
Редактировать
Пользователь jamit поделился своим вопросом в комментариях. Я думаю в данный момент, потому что это будет поведение конструктора для шаблона класса; Я хочу вставить и заменить, а не вставлять и сдвигать.
* +1025 * Пример:
unsigned int value = 0x01234567;
unsigned char a = 0x9D;
insertByte( a, value, 2 );
// value = 0x019D4567