У меня есть структура в C++, которая имеет поле char [10].Преобразование C++ char array в строку C#
struct Package
{
char str[10];
};
Я преобразовать в массив-структуру полукокса и отправить его и C# приложение через сокет TCP и там преобразовать его обратно в C# структуры.
[StructLayout(LayoutKind.Sequential)]
public struct Package
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string str;
};
Convertion сделано правильно, и я получаю сообщение, но проблема в том, когда длина сообщения меньше, чем размер массива, и я думаю, что это связано с нулевой терминатор в гр массив символов ++.
Например, если я посылаю "Hello \ 0" из C++ массив символов это что-то вроде:
H ELLO \ 0 \ 0 \ 0 \ 0 \ 0
И когда я его в C# приложение это что-то вроде:
H ELLO I I I I I
И я действительно не знаю, что делать с этим (лично нравится называть) вредную символ «I».
, пожалуйста, помогите мне в этом. Любая помощь приветствуется.
Update:
Я просто бросил-структуру, чтобы символ * и отправить его через сокет;
Package pkg;
strcpy_s(pkg.str, 'Hello\0');
char* bytes = (char*)&pkg;
send(socket, bytes, sizeof(pkg), NULL);
Размер вашего массива - 10. Попробуйте ввести 10 символов. У вас нет этого символа «Ì». Итак, вы можете разделить строку. Это одно из решений. –
Ваше решение подходит для 10 символов, но что, если мне нужно иметь все больше и больше персонажей. Howerver ваш ответ напомнил мне, что я могу иметь конец строкового символа, когда я отправляю массив char из C++. Тем не менее я жду большего. – user3530012
Кажется, что в коде C# вы не получаете символ '\ 0'.Или никогда не отправляется вам на C++, но в C++ массив устанавливается «memsetted» на 0x00 для всех символов по умолчанию. – LPs