У вас, похоже, проблема со строковым кодированием.Рассмотрим следующий тестовый код:
unsafe
{
InfoDetails d;
var encoding = Encoding.Unicode;
var stringBytes = encoding.GetBytes("TEZ");
for(int i=0; i<stringBytes.Length; i++) d.Name[i] = (sbyte)stringBytes[i];
Console.WriteLine(d.getName);
}
Вы действительно получите «T», но если вы измените кодировку на Encoding.ASCII
, вы получите «TEZ», как и ожидалось.
Решение: вынужно заранее знать кодировку информации и соответственно сгенерировать строку.Похоже, это Unicode, поэтому попробуйте сначала:
fixed (sbyte* namePtr = Name)
{
return new string(namePtr, 0, 50, Encoding.Unicode);
}