Я преобразовал образ в байтовый массив в С# и отправил его по TCP на серверное приложение, написанное в C++.
Теперь я хочу скопировать этот массив байтов в другой блок памяти. Я пробовал функцию memcpy()
но проблема заключается в том, что memcpy
копирует блок памяти до тех пор, пока не достигнет нулевого терминатора ('\ 0'), и массив байтов содержит много нулевых терминаторов, и я хочу, чтобы они также были скопированы.
Обновить
Для простоты я конвертирую строку "Hello\0" World\0 "в С# в массив байтов, используя следующий оператор:
string s = "Hello\0"World\0";
byte[] bytes = Encoding.UTF8.GetBytes(s);
Я получаю байты в unsigned char * в C++ и копирую его в другой указатель char следующим образом:
char *chars = new char[12];
memcpy(chars , recvChar, MESSAGE_12);
но char * приводит к "Hello";
Согласно этому
Функция memcpy()
не проверяет наличие конечного нулевого символа в источнике - он всегда копирует точно число байтов. Вы уверены, что это было memcpy?
Вы можете использовать что-то подобное для печати массива символов (printf завершается символом NULL):
for (int i = 0; i < 12; i++) //12 is the size of chars, I assume
{
if (chars[i]!=NULL) //if you hit a '\0', ignore it
printf("%c", chars[i]);
}