【发布时间】:2014-12-20 09:00:32
【问题描述】:
我有一个 C++ 结构,它有一个 char[10] 字段。
struct Package
{
char str[10];
};
我将结构转换为 char 数组并通过 TCP 套接字将其发送到 c# 应用程序,然后我将其转换回 c# 结构。
[StructLayout(LayoutKind.Sequential)]
public struct Package
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string str;
};
转换正确完成,我收到了消息,但问题是消息的长度小于数组的大小,我认为这是由于 c++ char 数组中的空终止符造成的。
例如,如果我从 C++ 发送“Hello\0”,则 char 数组类似于:
H e l l o \0 \0 \0 \0 \0
当我在 c# 应用程序中得到它时,它是这样的:
H e l l o Ì Ì Ì Ì Ì
而且我真的不知道如何处理这个(个人喜欢称呼)垃圾字符'Ì'。
请帮助我。任何帮助表示赞赏。
更新:
我只是将结构转换为 char* 并通过套接字发送;
Package pkg;
strcpy_s(pkg.str, 'Hello\0');
char* bytes = (char*)&pkg;
send(socket, bytes, sizeof(pkg), NULL);
【问题讨论】:
-
您的数组大小为 10。请尝试输入 10 个字符。你没有这个字符'Ì'。所以你可以拆分字符串。这是一种解决方案。
-
您的解决方案适用于 10 个字符,但如果我需要越来越多的字符怎么办。但是,您的回答让我想起,当我从 c++ 发送 char 数组时,我可以有一个字符串字符的结尾。我仍在等待更多帮助。
-
在 c# 代码中您似乎没有收到 '\0' 字符。或者永远不会在 C++ 中发送给您,但在 C++ 中,默认情况下所有字符的数组“memsetted”设置为 0x00
-
实际上,即使我在 C++ 中将 '\0' 放在 char 数组的末尾,它也不会在 c# 中收到。
-
我想我们需要更多代码。粘贴用于从 C++ 数组传递到 C# 字符串的方式