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

Std::copy как скопировать часть строки массива byte? - C++

Восстановить пароль Регистрация
 
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 16:16     Std::copy как скопировать часть строки массива byte? #1
Вот из этой строки:
C++
1
BYTE pbHash[40];
Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку:
C++
1
BYTE bAesKey[16];
Так будет?
C++
1
std::copy(pbHash, pbHash + 16, reinterpret_cast<BYTE *>(bAesKey));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 16:16     Std::copy как скопировать часть строки массива byte?
Посмотрите здесь:

Скопировать часть строки C++
std::copy C++
C++ Скопировать часть строки
std::istream часть кода C++
C++ BYTE to std::string как есть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
03.01.2016, 16:33     Std::copy как скопировать часть строки массива byte? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Да. Можно без каста. Ещё можно copy_n.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 18:04  [ТС]     Std::copy как скопировать часть строки массива byte? #3
Сделал так:

C++
1
2
3
BYTE bAesKey;   // Ключ AES - 16, 24, 32 байт
bAesKey = (BYTE)malloc(16);                 // Выделение памяти на 16 ячеек
std::copy(pbHash, pbHash + 16, bAesKey);    // Сгенерировать пароль из хэша
При компиляции:
Ошибка C2665 std::_Copy_impl: ни одна из 4 перегрузок не может преобразовать все типы аргументов AES Uncript d:\programs\microsoft visual studio 2015\vc\include\xutility 2220
Ошибка C2893 Сбой при специализации функции-шаблона "iterator_traits<_Iter>::iterator_category std::_Iter_cat(const _Iter &)" AES Uncript d:\programs\microsoft visual studio 2015\vc\include\xutility 2220
Ошибка C2672 "std::_Iter_cat": не найдена соответствующая перегруженная функция AES Uncript d:\programs\microsoft visual studio 2015\vc\include\xutility 2220
Предупреждение C4996 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' AES Uncript d:\programs\microsoft visual studio 2015\vc\include\xutility 2229
Hikari
Хитрая блондиночка $)
 Аватар для Hikari
1336 / 899 / 272
Регистрация: 21.12.2015
Сообщений: 3,604
03.01.2016, 18:10     Std::copy как скопировать часть строки массива byte? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Обязательно именно этой функцией? Она вроде для контейнеров предназначена а не для указателей в принципе?
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 18:30  [ТС]     Std::copy как скопировать часть строки массива byte? #5
Я больше не знаю таких, которые с любыми типами работают.
strncpy - это для строк только...
Хотя byte как и char от 0 до 255...
Может и можно...

Добавлено через 16 минут
Так вылетает:
C++
1
strncpy((char *)bAesKey, (char *)pbHash, 16);
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
03.01.2016, 20:28     Std::copy как скопировать часть строки массива byte? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
bAesKey = (BYTE)malloc(16);
Указатель в BYTE? И вообще на фиг malloc, уж как минимум new.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 23:25  [ТС]     Std::copy как скопировать часть строки массива byte? #7
Ничего не понял...

Всё по порядку.
Так делаю:
C++
1
2
BYTE bAesKey; // Ключ AES - 16, 24, 32 байт
bAesKey = (BYTE)malloc(16); // Выделение памяти на 16 ячеек
Потому, что проверяю длину ключа в свитче, т.е. мне нужно либо 16, либо 24, либо 32 ячейки.

Зачем здесь BYTE?
C++
1
bAesKey = (BYTE)malloc(16);
Ну потому, что без него тупо не компилируется.

Цитата Сообщение от Somebody Посмотреть сообщение
И вообще на фиг malloc, уж как минимум new.
Зачем мне new, если мне нужен массив BYTE?

Добавлено через 59 минут
Блин, ну как скопировать?

Вылетает при использовании:
C++
1
std::copy(pbHash, pbHash + 16, reinterpret_cast<BYTE *>(bAesKey));
C++
1
strncpy((char *)bAesKey, (char *)pbHash, 16);
Ошибки при компиляции:
C++
1
std::copy(pbHash, pbHash + 16, bAesKey);
Пробовал меньше 16 ставить - то же самое...

Добавлено через 2 минуты
Попробовал при создании ставить 16 ячеек - всё работает...
Это из-за:
C++
1
malloc(16)
Оно не ставит 16 ячеек массиву...

Добавлено через 5 минут
Как же тогда массиву выделять память?

C++
1
2
BYTE bAesKey[1];
bAesKey = (BYTE)malloc(16);
???
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
03.01.2016, 23:29     Std::copy как скопировать часть строки массива byte? #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
Я больше не знаю таких, которые с любыми типами работают.
старый добрый memcpy
http://cpp.com.ru/shildt_spr_po_c/14/memcpy.html
для твоей задачи
C++
1
memcpy(bAesKey, pbHash,16*sizeof(BYTE));
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 23:31  [ТС]     Std::copy как скопировать часть строки массива byte? #9
Функция calloc выделяет блок памяти для массива размером — num элементов, каждый из которых занимает size байт, и инициализирует все свои биты в нулями.

C++
1
int * arrayPtr = (int*) calloc(size,sizeof(int)); // выделяем память под динамический массив целых чисел
А без звёздочки будет работать?
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
03.01.2016, 23:32     Std::copy как скопировать часть строки массива byte? #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
Как же тогда массиву выделять память?
тебе же сказали
Цитата Сообщение от Somebody Посмотреть сообщение
уж как минимум new.
C++
1
2
BYTE* bAesKey; // Ключ AES - 16, 24, 32 байт
bAesKey = new BYTE[16];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2016, 23:38     Std::copy как скопировать часть строки массива byte?
Еще ссылки по теме:

C++ Как скопировать часть строки до определенного символа?
Не получается использовать std::copy как memcpy? C++
Ошибка в std::copy не ясна C++

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

Или воспользуйтесь поиском по форуму:
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 553
Завершенные тесты: 1
03.01.2016, 23:38  [ТС]     Std::copy как скопировать часть строки массива byte? #11
П.с. не увидел, спасибо.

Добавлено через 5 минут
Всё работает )) Ыыы
Yandex
Объявления
03.01.2016, 23:38     Std::copy как скопировать часть строки массива byte?
Ответ Создать тему
Опции темы

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