Функция, которая копирует в байтовый вектор, меняет значения - PullRequest
2 голосов
/ 29 апреля 2010

Эй, я написал функцию для копирования любого типа переменной в байтовый вектор, однако всякий раз, когда я вставляю что-то, оно вставляется в обратном порядке.

Вот код.

template <class Type>
void Packet::copyToByte(Type input, vector<uint8_t>&output)
{
    copy((uint8_t*) &input, ((uint8_t*) &input) + sizeof(Type), back_inserter(output));
}

Теперь, когда я добавляю, например, uint16_t со значением 0x2f1f, он вставляется как 1f 2f вместо ожидаемого 2f 1f.

Что я здесь не так делаю?

С уважением, Xeross

Ответы [ 3 ]

8 голосов
/ 29 апреля 2010

Если вы находитесь на машине little-endian (например, x86), байты будут отображаться в обратном порядке (то есть байты младшего разряда будут появляться перед байтами более высокого порядка).

Если вы действительно хотите изменить порядок байтов, вы можете использовать std::reverse.

4 голосов
/ 29 апреля 2010

Вы не делаете ничего плохого. Вы работаете на машине с прямым порядком байтов (например, Pentium). На них младший значащий байт значения нескольких байтов сохраняется по наименьшему адресу. Отсюда и результат.

0 голосов
/ 29 апреля 2010
...