gpt4 book ai didi

c# - 如何在 C# 应用程序中转换 C 结构?

转载 作者:太空狗 更新时间:2023-10-29 16:07:31 25 4
gpt4 key购买 nike

我正在尝试在 C# 应用程序中使用来自 C DLL 的结构。我无法获得我正在处理的结构的等效数据类型。我正在处理来自 C 的这些数据类型:

struct teststruct {
unsigned short protocol_type; //c#'s UInt16 ?
unsigned char hardwareSize; //c#'s byte?
UCHAR dest[6]; //unsigned char and thus byte in c#?
unsigned char ip_version : 4; //How to get the exact same thing in c#?!!
unsigned char Nonce_Sum_Flag: 1; //the same as above
unsigned char ip[4]; // !!
unsigned short in6_addr_src[8]; // !!
char* astring; //string!?
char anarray[10]; //string? or char[]?
const char* conststring; //string? or array[] or char[]?
};

对于结构本身,我认为要提前

[StructLayout(LayoutKind.Sequential)]

足够了。

这是我的 C# 结构;很明显,我坚持使用中间的两种和最后三种数据类型。我不知道如何处理它们!

[StructLayout(LayoutKind.Sequential)]
public struct teststruct
{
public UInt16 protocol_type; //c's unsigned short ?
public byte hardwareSize; //c's unsigned char?
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] dest; //c's unsigned char ?
unsigned char ip_version : 4; //How to get the exact same thing in c#?!!
unsigned char Nonce_Sum_Flag : 1; //the same as above
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] ip; // right?!
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public UInt16[] in6_addr_src; // !!
char* astring; // !?
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] anarray; //string? or char[]?
const char* conststring; //string? or array[] or char[]?
}

有人会特别建议我关于位分配的 C 独特概念吗?我的意思是这一行:

unsigned char Nonce_Sum_Flag: 1;

还有最后3个!

最佳答案

char* 使用 [MarshalAs(UnmanagedType.LPStr)]string

对于位域unsigned char ip_version : 4;,在c#中没有直接支持,你自己实现这个link可能有帮助。

关于c# - 如何在 C# 应用程序中转换 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22708647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com