C# 如何存储长度前缀字符串
我有一个程序,接收二进制序列化的网络数据包。我目前有一种方法,通过使用指针将数据直接从字节数组存储到结构中。但我现在需要的是一种在结构中存储UTF字符串的方法,同时仍然保持从字节数组复制的简单方法。假定字符串的前缀为无符号短字符,表示字符串的字节长度。这是C#在内部存储char[]或字符串的方式,还是我需要创建自己的结构来存储它 我当前的结构布局如下所示:C# 如何存储长度前缀字符串,c#,string,memory,pointers,struct,C#,String,Memory,Pointers,Struct,我有一个程序,接收二进制序列化的网络数据包。我目前有一种方法,通过使用指针将数据直接从字节数组存储到结构中。但我现在需要的是一种在结构中存储UTF字符串的方法,同时仍然保持从字节数组复制的简单方法。假定字符串的前缀为无符号短字符,表示字符串的字节长度。这是C#在内部存储char[]或字符串的方式,还是我需要创建自己的结构来存储它 我当前的结构布局如下所示: public struct GenericPacket { public short packetid; public s
public struct GenericPacket
{
public short packetid;
public static GenericPacket ReadUsingPointer(byte[] data)
{
unsafe
{
fixed (byte* packet = &data[0])
{
return *(GenericPacket*)packet;
}
}
}
}
使用指针读取只是获取一个字节数组并返回一个指向它的指针,但作为泛型结构。这适用于所有普通类型,但字符串更复杂
谢谢你的建议 这是一个BSTR,BSTR方法将对其起作用(在Win32和Win32兼容库中提供)-如果前缀指的是字节,而不是字符计数,因为字符可以是多个字节;BSTR对此一无所知
C字符串是空的,没有前缀,C++和C字符串使用实现定义的存储,尽管它们通常使用一个具有单独长度参数的数组。它们绝对不是BSTR。
您可以使用System.Text.Encoding.GetString(字节[])或System.Text.Encoding.UTF8.GetString(字节[])返回字符串。您可以像这样从char[]构造字符串char[] foo = new char[] {'a','b','c','d'}
string bar = new string(foo);
将其与范围数组副本相结合,从较大的字节块中提取字符串
我相信这就是System.Text.Encoding.GetString(byte[]data,int start,int length)实际上在内部所做的,但在.NET Micro Framework中这是不可用的,因此您必须将其详细说明。我知道,但我正在将字节数组直接映射到内存位置,并想知道如何使用字符串来实现它。因此,前缀以字节为单位。。。那是不是意味着不?!