Я упаковываю байты в структуру, и некоторые из них соответствуют строке Unicode. Следующее работает отлично для строки ASCII:
[StructLayout(LayoutKind.Sequential)]
private struct PacketBytes
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string MyString;
}
Я предполагал, что смогу сделать
[StructLayout(LayoutKind.Sequential)]
private struct PacketBytes
{
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 32)]
public string MyString;
}
, чтобы сделать его Unicode, но это не сработало (значение поля было пустым, а другие поля имели неверные значения, что указывало на то, что распаковка байтов была испорчена). (Так как это поле является частью структуры с другими полями, которые для ясности я пропустил, я не могу просто изменить CharSet содержащей структуры.)
Есть идеи, что я делаю не так?
Вот входные данные (64 байта, младший порядок):
31:00:31:00:32:00:33:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
На выходе должна быть строка Unicode "1123".