如何用C#C结构编写指针
我在C语言中有以下结构:如何用C#C结构编写指针,c#,c,c#-4.0,C#,C,C# 4.0,我在C语言中有以下结构: typedef struct { int mode; unsigned char *fs;//a pointer to sbyte[16] unsigned char *flist;//a pointer to sbyte[128] unsigned char *ival;//a pointer to sbyte[8] unsigned char *ctx;//a pointer to sbyte[8] int
typedef struct
{
int mode;
unsigned char *fs;//a pointer to sbyte[16]
unsigned char *flist;//a pointer to sbyte[128]
unsigned char *ival;//a pointer to sbyte[8]
unsigned char *ctx;//a pointer to sbyte[8]
int fin;
} mStruct;
我需要用C写。我试图将其定义为:
[StructLayout(LayoutKind.Sequential,Pack=1)]
public struct avGostParam
{
public int mode;//a mode
public IntPtr fs;// does char* converts to IntPtr?
public IntPtr flist;//does char* converts to IntPtr?
public IntPtr ival;//does char* converts to IntPtr?
public IntPtr ctx;//does char* converts to IntPtr?
public int fin;
}
但这是错误的方式。你能帮我把这个翻译成你需要的结构中的c吗
尝试此示例,其中只有字段fs
通过fs
属性处理为托管字符串转换
public unsafe struct avGostParam
{
public int mode;
public fixed char fs[16];
public fixed char flist[128];
public fixed char ival[8];
public fixed char ctx[8];
public string Fs
{
get
{
fixed(char* ptr=fs)
{
return GetString(ptr, 16);
}
}
set
{
fixed(char* ptr=fs)
{
SetString(ptr, 16, value);
}
}
}
private static string GetString(char* ptr, int length)
{
char[] result=new char[length];
for(int i=0; i<length; i++)
{
result[i]=ptr[i];
}
return new string(result);
}
private static void SetString(char* ptr, int length, string value)
{
if(value.Length<length)
{
value=value.PadRight(length);
}
char[] items=value.ToCharArray();
for(int i=0; i<length; i++)
{
ptr[i]=items[i];
}
}
}
unsafe class Program
{
static void Main(string[] args)
{
var av=new avGostParam();
av.Fs="ABCDEF";
char* ptr=av.fs;
for(int i=0; i<16; i++)
{
Console.Write(av.fs[i]);
}
}
}
公共不安全结构avGostParam
{
公共int模式;
公共固定字符fs[16];
公共固定字符列表[128];
公共固定字符[8];
公共固定字符ctx[8];
公共字符串Fs
{
得到
{
固定(字符*ptr=fs)
{
返回GetString(ptr,16);
}
}
设置
{
固定(字符*ptr=fs)
{
设置管柱(ptr,16,值);
}
}
}
私有静态字符串GetString(char*ptr,int-length)
{
字符[]结果=新字符[长度];
对于(int i=0;我认为您必须使用指针将代码标记为不安全
,并允许在项目的属性中使用不安全的代码。不,IntPtr
不需要不安全
(不要问为什么)…代码是正确的。你为什么需要指针?你只是想用一些数组作为成员声明一个结构吗?如果是的话,使用数组,而不是指针。我想这是一个,为什么你想让成员成为指针?谢谢,这是我需要的!