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

Контейнер для unsigned char * - C++

Восстановить пароль Регистрация
 
noname_club
 Аватар для noname_club
100 / 88 / 9
Регистрация: 01.05.2013
Сообщений: 563
20.12.2013, 16:54     Контейнер для unsigned char * #1
возьмем например char *

для него в с++ есть стандартный контейнер и называется он std::string

возьмем например Delphi

там для хранения таких бинарников есть класс TMemoryStream

~~~

а теперь вопрос:

есть ли стандартный с++ класс для хранения unsigned char *, по аналогии со std::string ?

Добавлено через 1 час 25 минут
разобрался

для хранения можно использовать динамические массивы unsigned char *

выделение памяти происходит достаточно просто

C++
1
2
3
unsigned char * mymemorydata = new unsigned char[~размер выделяемой памяти в байтах~];
// далее просто переписываем данные с другого указателя
memcpy(mymemorydata, ~указатель данных источника~, ~размер выделяемой памяти в байтах~ );

уничтожение идет через деструктор c++ массивов

C++
1
delete[] mymemorydata;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2013, 16:54     Контейнер для unsigned char *
Посмотрите здесь:

C++ Работа с unsigned char
C++ unsigned char 0....255?!
C++ как задать границу для типа данных unsigned char*
C++ Совместимость char и unsigned char
Изменить программу для типа unsigned char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
20.12.2013, 18:21     Контейнер для unsigned char * #2
std::vector<unsigned char *>
noname_club
 Аватар для noname_club
100 / 88 / 9
Регистрация: 01.05.2013
Сообщений: 563
20.12.2013, 22:19  [ТС]     Контейнер для unsigned char * #3
std::vector<unsigned char *>
быстродействие? в операциях memcpy ?
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
20.12.2013, 22:36     Контейнер для unsigned char * #4
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
20.12.2013, 22:43     Контейнер для unsigned char * #5
Конечно же, имелся в виду vector<unsigned char>.
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
20.12.2013, 22:45     Контейнер для unsigned char * #6
Nick Alte, точно.
noname_club
 Аватар для noname_club
100 / 88 / 9
Регистрация: 01.05.2013
Сообщений: 563
21.12.2013, 13:30  [ТС]     Контейнер для unsigned char * #7
Цитата Сообщение от Убежденный Посмотреть сообщение
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
на практике проверял сабж при больших объемах до 3 МБ?
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
21.12.2013, 13:38     Контейнер для unsigned char * #8
Цитата Сообщение от noname_club Посмотреть сообщение
есть ли стандартный с++ класс для хранения unsigned char *, по аналогии со std::string ?
Если по аналогии с std::string - это std::basic_string<unsigned char>.
А быстродействие надо проверять, а не гадать о нём.
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
21.12.2013, 13:40     Контейнер для unsigned char * #9
Цитата Сообщение от noname_club Посмотреть сообщение
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
Да, именно так, и этот факт недвусмысленно определен в стандарте языка.

Стандарт C++ 2003:
23.2.4 Class template vector

1 A vector is a kind of sequence that supports random access iterators. In addition, it
supports (amortized) constant time insert and erase operations at the end; insert and erase
in the middle take linear time. Storage management is handled automatically, though hints
can be given to improve efficiency. The elements of a vector are stored contiguously,
meaning that if v is a vector<T, Allocator> where T is some type other than bool,
then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size()
.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 13:42     Контейнер для unsigned char *
Еще ссылки по теме:

C++ const char и unsigned char
C++ Unsigned char to vector
C++ Unsigned char to string

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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
21.12.2013, 13:42     Контейнер для unsigned char * #10
Цитата Сообщение от noname_club Посмотреть сообщение
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
на практике проверял сабж при больших объемах до 3 МБ?
Стандарт изначально строго требует от реализации вектора, чтобы при любых объёмах это был непрерывный динамический массив. Так что проверять имеет смысл только если есть веские сомнения, а не подсунули ли вам вместо стандартной библиотеки шаблонов вопиюще некачественную подделку.
Yandex
Объявления
21.12.2013, 13:42     Контейнер для unsigned char *
Ответ Создать тему
Опции темы

Текущее время: 08:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru