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