Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.68
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
#1

Битстаффинг - C++

03.08.2011, 19:51. Просмотров 4392. Ответов 21
Метки нет (Все метки)

Всем привет. Есть такой термин - Битстаффинг. Это бит-ориетированная процедура по вставке "0" после 5-ти последовательных "1". Сейчас моя реализация вполне себе работает. Принимает вектор битов, вставляет нули в нужном месте и возвращает вектор битов. Каждый бит занимает один байт. Кто нибудь знает как это можно ускорить? Можно даже добавлять "0" в существующем векторе, но операция "vector.insert", мне кажется будет полным убийством скорости работы. У кого какие варианты есть по оптимизации?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <stdio.h>
#include <vector>
 
class Zero_Insert {
 
private: unsigned short counter;
 
public: ~Zero_Insert(void){};
 
public: Zero_Insert(void)
        {
            Reset();
        };
 
public: void Reset(void)
        {
            counter=0;
        }
 
public: void Zeros_Insertion(vector <unsigned char> & InputVector, vector <unsigned char> & OutputVector)
        {
            
                        OutputVector.reserve(InputVector.size());
 
            for(int j = 0; j < InputVector.size(); j++)
            {
                if( InputVector[j] == 1 )
                {
                    counter++;
                }
                else
                {
                    counter=0;
                }
                OutputVector.push_back(InputVector[j]);
                if(counter==5){
                    OutputVector.push_back(0);
                    counter = 0;
                }
 
            }
        }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2011, 19:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Битстаффинг (C++):

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...

C\C++ Битстаффинг (Bitstuffing) -

C\C++ Битстаффинг (Bitstuffing) - C++
Добрый день, уважаемые господа и дамы. Стоит задача реализовать битстаффинг, забитстаффить инфу на одном компе, передать на другой,...

Verilog. Битстаффинг и дестаффинг - Программируемая логика
Попытался я сымитировать битстаффинг (предупреждение появления последовательностей из 5 нулей или единиц) и возврат к исходным сигналам. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
-=ЮрА=-
Заблокирован
Автор FAQ
04.08.2011, 17:17 #16
Цитата Сообщение от snayperAlfa Посмотреть сообщение
Использование strstr может оказаться дольше простого перебора байтов?
Однозначно нет,
Цитата Сообщение от snayperAlfa Посмотреть сообщение
memcpy() использовать нельзя. од будет запускаться на ARM архитектуре и могут быть грабли с BigEndian / LittleEndian
- граблей не будет,функция выполняет копирование внутри отведенного блока памяти, это никак не отразиться на порядке следования битов.
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
04.08.2011, 17:53  [ТС] #17
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я не об этом, а о том, что модифицированные данные должны оставаться набором битов, а не изменением битов в байты. Т.е. vector <boost:uint8_t> не подходит. Или ты его потом байты обратно в биты преобразовывать будешь? Производительность пострадает, да.
Потом этот вектор битов будет дополнен до кратности 8, преобразован в байты (размер вектора байтов будет в 8 раз меньше вектора битов). А потом еще парочка таких преобразований байты-биты, потому что буду выполняться побайтные операции кодирования.

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
И тебя не смущает, что у тебя все байты равны 0 или 1? Ещё раз мой пост с 1 страницы перечитай. А лучше дважды.
Пока что нет, ибо не вижу другого способа.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.08.2011, 17:57 #18
оК. Если хочешь использовать std::vector, используй std::vector<bool>. Он прям сразу битами и есть. Разумеется, максимальную производительность ты получишь только при ручной реализации. Желательно на асме. На плюсах перенос знака нельзя нормально сделать.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2011, 22:56 #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
используй std::vector<bool>
Можно bitset попробовать.
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
04.08.2011, 23:00  [ТС] #20
bitset будет медленнее
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2011, 23:03 #21
Цитата Сообщение от snayperAlfa Посмотреть сообщение
bitset будет медленнее
Обоснуйте, пожалуйста. Если мы заговорили о векторе, значит автоматически подразумеваем, что удобство важнее скорости. Если же важна эффективность, тогда надо пользоваться массивами из целочисленных и битовыми операциями. Либо делать вставку на ассемблере, но тут зависит от прямоты рук.
0
snayperAlfa
2 / 2 / 1
Регистрация: 13.08.2008
Сообщений: 84
04.08.2011, 23:37  [ТС] #22
Важна скорость. Вектор - потому что неизвестно точное количество входных данных.
Ассемблер отпадает, ибо код будет выполняться на некой АРМ архитектуре.
0
Yandex
Объявления
04.08.2011, 23:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru