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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
#1

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

20.12.2013, 16:54. Просмотров 468. Ответов 9
Метки нет (Все метки)

возьмем например 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++ Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию
C++ Размер для данных (int, char, long, double, short, unsigned, float)
C++ Сделать преобразование unsigned char в char, а затем типу int
C++ unsigned char 0....255?!
C++ как задать границу для типа данных unsigned char*
C++ Совместимость char и unsigned char
Изменить программу для типа unsigned char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14662 / 6608 / 1046
Регистрация: 02.05.2013
Сообщений: 10,884
Завершенные тесты: 1
20.12.2013, 18:21     Контейнер для unsigned char * #2
std::vector<unsigned char *>
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
20.12.2013, 22:19  [ТС]     Контейнер для unsigned char * #3
std::vector<unsigned char *>
быстродействие? в операциях memcpy ?
Убежденный
Системный программист
 Аватар для Убежденный
14662 / 6608 / 1046
Регистрация: 02.05.2013
Сообщений: 10,884
Завершенные тесты: 1
20.12.2013, 22:36     Контейнер для unsigned char * #4
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,911
Завершенные тесты: 1
20.12.2013, 22:43     Контейнер для unsigned char * #5
Конечно же, имелся в виду vector<unsigned char>.
Убежденный
Системный программист
 Аватар для Убежденный
14662 / 6608 / 1046
Регистрация: 02.05.2013
Сообщений: 10,884
Завершенные тесты: 1
20.12.2013, 22:45     Контейнер для unsigned char * #6
Nick Alte, точно.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
21.12.2013, 13:30  [ТС]     Контейнер для unsigned char * #7
Цитата Сообщение от Убежденный Посмотреть сообщение
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
на практике проверял сабж при больших объемах до 3 МБ?
Somebody
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
21.12.2013, 13:38     Контейнер для unsigned char * #8
Цитата Сообщение от noname_club Посмотреть сообщение
есть ли стандартный с++ класс для хранения unsigned char *, по аналогии со std::string ?
Если по аналогии с std::string - это std::basic_string<unsigned char>.
А быстродействие надо проверять, а не гадать о нём.
Убежденный
Системный программист
 Аватар для Убежденный
14662 / 6608 / 1046
Регистрация: 02.05.2013
Сообщений: 10,884
Завершенные тесты: 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++ Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
C++ Приведение типов unsigned char[2] to unsigned char [64]
Типы данных - где нужно использовать char, а где unsigned char? C++
C++ Неверная конверсия из char* в unsigned char*

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

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

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