Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] программа по выделению битов 
:(
    Опции темы
davik
Дата 24.12.2017, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.12.2017

Репутация: нет
Всего: нет



Задача такова дано 8 байт 12 34 56 AB CD 13 25 36  из каждого байта нужно взять 2 бит и из этих вторых битов составить конечный байт порядок вторых битов такой - 2 бит восьмого байта будет 1 битом нового байта, 2 бит седьмого байта будет вторым битом нового байта..................... 2 бит 1байта будет восьмым битом нового байта, в результате должен получиться байт 14. Сам че то ни как не осилю, совсем еще новичек
PM MAIL   Вверх
JAPH
Дата 27.12.2017, 13:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 12
Всего: 23



Мда, если бы не пример, я бы не понял условия. Биты нумеруются в другом порядке: самый младший имеет номер 0, самый старший в байте - номер 7.

Код
#define N 8
unsigned char bytes [N] = { 0x12, 0x34, 0x56, 0xAB, 0xCD, 0x13, 0x25, 0x36 };
int main () {
    unsigned result = 0;
    for (int i = 0; i < N; i++) result = (result >> 1) | ((0x40 & bytes[i]) << 1);
    return result;
}



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
davik
Дата 30.12.2017, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.12.2017

Репутация: нет
Всего: нет



Очень помогли, а если последовательность будет вот такой :
1 бит 5 байта становится 0 битом нового байта
1 бит 1 байта становится 1 битом нового байта
1 бит 6 байта становится 2 битом нового байта
1 бит 2 байта становится 3 битом нового байта
1 бит 7 байта становится 4 битом нового байта
1 бит 3 байта становится 5 битом нового байта
1 бит 8 байта становится 6 битом нового байта
1 бит 4 байта становится 7 битом нового байта
это тоже можно в цикл загнать?





PM MAIL   Вверх
JAPH
Дата 31.12.2017, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 12
Всего: 23



Конечно, можно smile

Код
#include <unistd.h>
typedef struct {
    size_t byteNumber;
    unsigned bitNumber;
} BitSource;
unsigned char bytes [] = { 0x12, 0x34, 0x56, 0xAB, 0xCD, 0x13, 0x25, 0x36 };
BitSource bits [] = {
    { 4, 1 },
    { 0, 1 },
    { 5, 1 },
    { 1, 1 },
    { 6, 1 },
    { 2, 1 },
    { 7, 1 },
    { 3, 1 }
};
int main () {
    unsigned result = 0;
    for (size_t i = 0; i < sizeof(bits) / sizeof(bits[0]); i++) result |= ((bytes[bits[i].byteNumber] >> bits[i].bitNumber) & 1) << i;
    return result;
}



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1058 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.