Я хочу преобразовать значение из прямого порядка байтов в обратный порядок байтов (и наоборот). У меня значение выражено как массив бит, а не как одно целое число. Как я могу реализовать функцию замены байтов?
Как преобразовать порядок байтов в массив битов
Ответы (2)
Я не особо разбираюсь в C ++, так что сделаю это в общих чертах.
Преобразование от прямого порядка байтов к прямому порядку байтов означает обратное преобразование байтов. То есть сегмент 8 бит.
Итак, если у вас есть массив из N
байтов (здесь псевдокодирован):
bool bits[8*N];
Вы сделаете что-то вроде этого:
for(int i = 0; i < N/2; i++) {
for(int j = 0; j < 8; j++) {
bool tmp = bits[8*i+j];
bits[8*i+j] = bits[8*(N-i-1)+j];
bits[8*(N-i-1)+j] = tmp;
}
}
В комментариях вы упомянули, что «биты» на самом деле являются указателями на выражения, которые позже оцениваются на правильные биты. Правильное изменение порядка указателей таким образом приведет к правильному изменению порядка байтов, когда вы позже получите биты.
person
tskuzzy
schedule
05.06.2012
std::reverse
сработает, или мне не хватает чего-то огромного? - person chris   schedule 05.06.2012std::rotate
? Вы можете перемещать группу битов. - person chris   schedule 05.06.2012int
, или упакованный массив, такой как битовый набор? - person tskuzzy   schedule 05.06.2012