2013-07-23 2 views
0

Иам происходит через книгу на приложенном C++двоичная реализация строки в C++

Binary класса строки необходимо собрать и maniputlate бинарных потоков данных. Эти потоки данных могут представлять что-либо из изображения данных в содержимое объектов. Здесь автор также упомянул, что это как объект потокового или объектного сопротивления.

Что автор означает по потоку объекта. Может ли кто-нибудь дать мне простой пример того, как мы можем написать двоичный класс строк.

Спасибо за ваше время и помощь.

+0

Разве это не то, что 'fstream' уже есть? –

+0

Ищите 'serialization' вместо' object streaming' – SomeWittyUsername

+0

@CarlNorum: как fstream связан с сопротивлением объекта – venkysmarty

ответ

1

Для сбора и обработки двоичных потоков данных необходим двоичный класс строк.

Это по существу означает, что строка (или поток) может содержать произвольное количество элементов (двоичные данные, биты), которые могут представлять что угодно, и вы можете изменить их с помощью класса.

Эти потоки данных могут представлять что угодно: от данных изображения до содержимого объектов.

Вы можете делать с потоком все, что захотите (обычно это ограничивается реализацией). Например, вы можете загружать необработанные данные изображения в объект потока, а затем читать одиночные байты. Вы могли бы также написать одиночные символы для потока (или массива) и сохранить его как необработанные данные изображения. Элементарная строка/поток не ограничивает вас ни одной интерпретацией. Вместо этого фактическая реализация/интерфейс определяет эту часть.

Здесь автор также отметил, что это похоже на потоковое воспроизведение объекта или настойчивость объекта.

«Объект потоковой передачи» здесь означает передачу чего-либо. Например. отправка данных по сети или порту (например, использование в качестве буфера для отправки или получения данных).«Перенос объектов» означает сохранение чего-то (что позволяет сохранить его) даже в то время, когда ваша программа больше не работает (загрузка/сохранение).


По существу, почти любой поток, а также контейнеры, доступные в STL уже то, что автор рассматривает двоичную строку. Разница заключается только в группировке, например. вы можете получить доступ/прочитать/записать отдельные биты или просто байты/слова/что угодно?

Чтобы получить настоящий «бит-поток», вы можете просто использовать что-то простое, как std::vector<bool>. Это позволяет вам сохранять логические значения, но вы можете также читать их как нечто иное (например, чтение их по блоку путем литья содержимого в массив целых чисел).

Но я бы сказал, что что-то простое, как std::stream, будет даже лучше соответствовать описанию автора: его можно использовать для хранения постоянных данных, его можно использовать для передачи данных, и его можно использовать для хранения/загрузки данные в разных форматах/интерпретациях. Например, вы можете писать отдельные биты или байты, а затем читать их как целое число или даже строку.

+0

Nitpick: [with std :: stream] «вы можете писать отдельные биты или байты» - нет, вы не можете - они работают в единицах символов/байтов, хотя, конечно, вы можете передать байт, в котором только один бит имеет значение. ура –

0

Что автор означает по потоку объекта.

Они означают отправку - из одной части программы - вывод, который кодирует значение объекта, так что получающий код может построить объект с эквивалентным значением. Это в значительной степени похоже на настойчивость (например, сохранение объекта на диск, чтобы вы могли его загрузить позже), за исключением того, что данные не обязательно помещаются где-то постоянными (чтобы они могли быть потеряны, если питание было отключено), но оно прибывает в какой-то другой код, который эффективно выполняет шаг перезагрузки.

Например, и без получения уровней проверки ошибок:

struct X { int a; int b; }; 

std::ostream& operator<<(std::ostream& os, const X& x) 
    { return os << x.a << ' ' << x.b; } 

std::istream& operator>>(std::istream& is, X& x) 
    { return is >> x.a >> x.b; } 

X x1 = ...; 
std::istringstream iss; 
iss << x1; 
X x2; 
if (iss >> x) 
    assert(x2 == x1); 

Может ли один дать мне простой пример того, как можно записать двоичный класс строк.

Вам не обязательно ... Стандарт включает std::string, который может обрабатывать двоичные данные.

+0

Даже если 'std :: string' действительно может обрабатывать двоичные данные, для семантики я предпочитаю использовать' std :: vector <[unsigned] char> 'для задачи и зарезервировать' std :: string' для текстового контента. –

+0

@MatthieuM: достойное примечание, и немало людей разделяют ваши предпочтения; лично я часто склоняюсь к 'станд :: string', поскольку он мгновенно передает непрерывное * однобайтное * хранение в то время как с' VECTOR' я должен обратить внимание на тип данных, и (спорно) имеет гораздо более богатый интерфейс позволяя мне делать гораздо больше, используя функции-члены (которые IMHO читают лучше и их легче найти/использовать в большинстве IDE). –

Смежные вопросы