没有字段可用时如何从C结构中读取字符串?

时间:2015-02-26 03:37:57

标签: c# interop

有一个C结构,写在另一侧的插座上。我正在读C#。结构如下:

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
struct StupidStruct
{
    // fid sequence
    public short fid_seq;

    // field value length, after the length, follow the field content
    public ushort length;
}

从socket读取后,我需要读取我收到的字符串。我这样做的层无法访问缓冲区本身。它只能访问该结构。这该怎么做?

编辑:

我需要执行此操作的功能:

public void Handle(ref StupidStruct s)
{
    //GCHandle handle = GCHandle.Alloc(s.length, GCHandleType.Pinned);
    //var ptr = handle.AddrOfPinnedObject();
    //ptr = IntPtr.Add(ptr, sizeof (ushort));

    //The above is my initial attempt. But I think the address I get here is not the buffer address. What to do?

    handle.Free();
}

1 个答案:

答案 0 :(得分:0)

你是用c还是C#读它?哪一个正在监听套接字?如果是C#,则跳过互操作并直接从线路上读取字节。否则你需要做一些研究,因为你需要一个intptr到char数组的开头来做任何事情。结构是值类型,所以如果结构是无意义的,那么获取地址就像在堆栈上一样。