Merlin Опубликовано 23 июня, 2017 Поделиться Опубликовано 23 июня, 2017 Всем привет! Вторые сутки не удаётся на C++ соединить (склеить) два массива char значений (part+session_key) в один char массив (result). Где-то пробел в понимании Код: Показать контент #include <iostream> #include <Windows.h> #include <conio.h> using namespace std; int main() { char part[215] = "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"; char session_key[17] = "\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"; char result[216] = { NULL }; strcat_s(result, 216, part); strcat_s(result, 232, session_key); for (int i = 0; i < (sizeof(result)-1); i++) { printf("%02x", result[i]); if (i < (sizeof(result) - 2)) { printf("%s",":"); } } while (1) { } } Ожидаемый результат (part+session_key): Показать контент 41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:42:42:42:42:42:42:42:42:42:42:42:42:42:42:42:42 А выходит: Показать контент 41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:42 Подскажите, пожалуйста, как правильно объединить массивы без потери значений? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 23 июня, 2017 Поделиться Опубликовано 23 июня, 2017 int partSize = sizeof(part) * sizeof(part[0]); int sessionKeySize = sizeof(session_key) * sizeof(session_key[0]); int resultSize = partSize + sessionKeySize; char *result = new char[resultSize]; memcpy(result, part, partSize); memcpy(result + partSize, session_key, sessionKeySize); for (int i = 0; i < resultSize; i++) { printf("%02X%c", result[i], ':'); } Как-то так... Только это отнюдь не низкоуровневое программирование, посему тему переношу в правильный раздел. Ссылка на комментарий Поделиться на другие сайты Поделиться
Merlin Опубликовано 23 июня, 2017 Автор Поделиться Опубликовано 23 июня, 2017 В 23.06.2017 в 11:44, Xipho сказал: Как-то так... Показать Спасибо! Помогло, то, что надо! Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 24 июня, 2017 Поделиться Опубликовано 24 июня, 2017 чуть короче char * str1 = "str1"; char * str2 = "str2"; str1 = new char[strlen(str2)+1]; strcpy(str1,str2); for (; str1; str1++) { printf("%02X%c", str1, ':'); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Merlin Опубликовано 24 июня, 2017 Автор Поделиться Опубликовано 24 июня, 2017 В 24.06.2017 в 05:49, elvis66666 сказал: чуть короче Показать Спасибо за совет, но такой способ не подходит, т.к. на выходе получается уже другой тип данных, char превращается в string, а нужно, что бы итог оставался в char, т.к. дальше планируется использовать функцию send, которая требует именно char: Показать контент int send( _In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags ); Пример Xipho вполне подходит, только необходимо добавить -1 к переменным размера, что бы между соединяемыми данными не вклеивался нулевой байт (41:00:42) int partSize = sizeof(part) * sizeof(part[0])-1; int sessionKeySize = sizeof(session_key) * sizeof(session_key[0])-1; 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения