我有一个通过 UDP 传递给 C++ 应用程序的 C# 结构。我检查了字符串字段的长度,得到了 C# 和 C++ 代码的不同结果。以下是结构的定义:
// C# Side
//-------------
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct stName
{
/// Some data types
[MarshalAs(UnmanagedType.ByValTstr, SizeConst = 20)]
string StringName;
}
// C Side
//---------
struct stName{
/// Some data types
char StringName[20];
当 StringName = "192.168.53.2"时,该字段在 C# 端的大小为 12,而在 C 端为 20。我究竟做错了什么?如果C#使用字符串的实际长度,那么SizeConst字段代表什么?
最佳答案
当您在 C# 中检查字符串的长度时,它会计算字符数(192.168.53.2
正确地是 12 个字符长)。
但是,在 C 语言中,字符串实际上只是一个以 null 结尾的字符数组。但是,在这种情况下数组的大小就是您设置的大小,即 20。所以这个“字段”的大小是 20。
SizeConst
字段指的是 C 数组的大小,以便互操作可以适本地创建 C 数组(具有正确的总大小)。
关于c# - 将带有字符串的 C# 结构传递给 C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388569/