我無法轉換字節數組的字符串部分。字節數組結構
我的結構是這樣的:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct Message
{
public int id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string text;
}
測試字節數組的創建:
private static byte[] CreateMessageByteArray()
{
int id = 69;
byte[] intBytes = BitConverter.GetBytes(id);
string text = "test";
byte[] stringBytes = GetBytes(text);
IEnumerable<byte> rv = intBytes.Concat(stringBytes);
return rv.ToArray();
}
方法到我的字節組轉換成一個結構:
static T ByteArrayToStructure<T>(byte[] bytes) where T : struct
{
var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
var result = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return result;
}
當我打電話ByteArrayToStructure
從CreateMessageByteArray()
的結果我得到一個id = 60和text =「t」的結構。
爲什麼我不能得到整個字符串,例如「測試」?
編輯: 這是我忘了填寫Flash代碼:
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
我猜想爲MarshalAs屬性添加「CharSet = CharSet.Unicode」也可以。 – cubrr