Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611

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

03.01.2016, 16:16. Показов 3453. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот из этой строки:
C++
1
BYTE pbHash[40];
Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку:
C++
1
BYTE bAesKey[16];
Так будет?
C++
1
std::copy(pbHash, pbHash + 16, reinterpret_cast<BYTE *>(bAesKey));
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2016, 16:16
Ответы с готовыми решениями:

Как скопировать часть массива WCHAR в массив BYTE?
Пытаюсь зашифровать строку в AES. wTextIn - исходный текст wTextOut - шифрованный byte bDataBlocks = {0}; // Буффер WCHAR *...

Как скопировать часть строки до определенного символа?
Допустим, пользователь вводит с клавиатуры строку. Необходимо скопировать часть строки до какого-то определенного символа и поместить ее в...

Std::begin() ,std::end(),std::copy
...// int main() { std::vector&lt;double&gt; data;//Работает cout &lt;&lt; std::begin(data); double *data=new double; ...

10
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.01.2016, 16:33
Лучший ответ Сообщение было отмечено артист как решение

Решение

Да. Можно без каста. Ещё можно copy_n.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
03.01.2016, 18:04  [ТС]
Сделал так:

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_catego ry 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
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.01.2016, 18:10
Лучший ответ Сообщение было отмечено артист как решение

Решение

Обязательно именно этой функцией? Она вроде для контейнеров предназначена а не для указателей в принципе?
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
03.01.2016, 18:30  [ТС]
Я больше не знаю таких, которые с любыми типами работают.
strncpy - это для строк только...
Хотя byte как и char от 0 до 255...
Может и можно...

Добавлено через 16 минут
Так вылетает:
C++
1
strncpy((char *)bAesKey, (char *)pbHash, 16);
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.01.2016, 20:28
Лучший ответ Сообщение было отмечено артист как решение

Решение

C++
bAesKey = (BYTE)malloc(16);
Указатель в BYTE? И вообще на фиг malloc, уж как минимум new.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
03.01.2016, 23:25  [ТС]
Ничего не понял...

Всё по порядку.
Так делаю:
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);
???
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
03.01.2016, 23:29
Лучший ответ Сообщение было отмечено артист как решение

Решение

Цитата Сообщение от артист Посмотреть сообщение
Я больше не знаю таких, которые с любыми типами работают.
старый добрый memcpy
http://cpp.com.ru/shildt_spr_po_c/14/memcpy.html
для твоей задачи
C++
1
memcpy(bAesKey, pbHash,16*sizeof(BYTE));
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
03.01.2016, 23:31  [ТС]
Функция calloc выделяет блок памяти для массива размером — num элементов, каждый из которых занимает size байт, и инициализирует все свои биты в нулями.

C++
1
int * arrayPtr = (int*) calloc(size,sizeof(int)); // выделяем память под динамический массив целых чисел
А без звёздочки будет работать?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
03.01.2016, 23:32
Лучший ответ Сообщение было отмечено артист как решение

Решение

Цитата Сообщение от артист Посмотреть сообщение
Как же тогда массиву выделять память?
тебе же сказали
Цитата Сообщение от Somebody Посмотреть сообщение
уж как минимум new.
C++
1
2
BYTE* bAesKey; // Ключ AES - 16, 24, 32 байт
bAesKey = new BYTE[16];
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
03.01.2016, 23:38  [ТС]
П.с. не увидел, спасибо.

Добавлено через 5 минут
Всё работает )) Ыыы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2016, 23:38
Помогаю со студенческими работами здесь

Стандартный поток и STL (std::copy to std::cout)
#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; #include &lt;string&gt; using namespace std; ...

Скопировать часть строки и часть удалить
1. Удалить из строки ее часть с заданной позиции и заданной длины. 2. Скопировать часть строки с определенной позиции и определенной...

Не получается использовать std::copy как memcpy?
Получил задание переписать свою код: Поля x, y указывают координаты, куда должен быть помещен файл - кадр, а width, height ширину и...

BYTE to std::string как есть
Чё то я забыл (ну я же нуб :D ), как перевести массив байтов, записанный в массиве BYTE, ну или аналог unsigned char в строку, чтоб в...

Скопировать часть строки
Как мне скопировать часть строки с элемента a по элемент b?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru