Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用C#C结构编写指针_C#_C_C# 4.0 - Fatal编程技术网

如何用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

我在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 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
不需要
不安全
(不要问为什么)…代码是正确的。你为什么需要指针?你只是想用一些数组作为成员声明一个结构吗?如果是的话,使用数组,而不是指针。我想这是一个,为什么你想让成员成为指针?谢谢,这是我需要的!