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

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

Войти
Регистрация
Восстановить пароль
 
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
#1

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

20.12.2013, 16:54. Просмотров 529. Ответов 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2013, 16:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Контейнер для unsigned char * (C++):

Приведение типов unsigned char[2] to unsigned char [64] - C++
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main int main() { SHA1Context sha; uint8_t...

Изменить программу для типа unsigned char - C++
Подскажите пожалуйста, что нужно изменить в программе перевода числа, чтобы она правильно работала для введенного числа типа unsigned...

Как задать границу для типа данных unsigned char*? - C++
У меня есть двумерный массив значений типа unsigned char*, диапазон значений которого 0 - 255. Как задать условие, чтобы при увеличении на...

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ? - C++
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Размер для данных (int, char, long, double, short, unsigned, float) - C++
Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию (о...

9
Убежденный
Ушел с форума
Эксперт С++
15690 / 7200 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
20.12.2013, 18:21 #2
std::vector<unsigned char *>
1
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
20.12.2013, 22:19  [ТС] #3
std::vector<unsigned char *>
быстродействие? в операциях memcpy ?
0
Убежденный
Ушел с форума
Эксперт С++
15690 / 7200 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
20.12.2013, 22:36 #4
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
20.12.2013, 22:43 #5
Конечно же, имелся в виду vector<unsigned char>.
2
Убежденный
Ушел с форума
Эксперт С++
15690 / 7200 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
20.12.2013, 22:45 #6
Nick Alte, точно.
0
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
21.12.2013, 13:30  [ТС] #7
Цитата Сообщение от Убежденный Посмотреть сообщение
По стандарту, элементы vector должны располагаться в непрерывной
области памяти. Т.е. к ним тоже можно применять memcpy.
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
на практике проверял сабж при больших объемах до 3 МБ?
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,197
Завершенные тесты: 1
21.12.2013, 13:38 #8
Цитата Сообщение от noname_club Посмотреть сообщение
есть ли стандартный с++ класс для хранения unsigned char *, по аналогии со std::string ?
Если по аналогии с std::string - это std::basic_string<unsigned char>.
А быстродействие надо проверять, а не гадать о нём.
1
Убежденный
Ушел с форума
Эксперт С++
15690 / 7200 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
21.12.2013, 13:40 #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()
.
1
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.12.2013, 13:42 #10
Цитата Сообщение от noname_club Посмотреть сообщение
хочешь сказать что vector<unsigned char> это будет динамический массив байтов, к которым всегда применим memcpy?
на практике проверял сабж при больших объемах до 3 МБ?
Стандарт изначально строго требует от реализации вектора, чтобы при любых объёмах это был непрерывный динамический массив. Так что проверять имеет смысл только если есть веские сомнения, а не подсунули ли вам вместо стандартной библиотеки шаблонов вопиюще некачественную подделку.
1
21.12.2013, 13:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 13:42
Привет! Вот еще темы с ответами:

Неверная конверсия из char* в unsigned char* - C++
Здравствуйте. Почему-то ловлю ошибку, гласящую о том, что не удалась конверсия из char* в *unsigned char*. Не понимаю, почему она вылазит?...

Совместимость char и unsigned char - C++
Есть некие числа в виде unsigned char. Есть строка в виде массива char (которая потом сбрасывается в файл с помощью fputs). В программе...

const char и unsigned char - C++
Всем привет. Такое дело. Это даже проблемой не назовешь, но суть такая. Мне нужно записать const char в unsigned char через конструктор...

Unsigned char * в char * и наоборот - C++
Здравствуйте!помогите перевести unsigned char * в char * и наоборот без использования printf


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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