Я борюсь с программой на C # для чтения двоичных записей из базы данных. Записи были созданы с Borland Delphi. Вот пример:
// Delphi record definition
tBowler_Rec = Record
public
gender : tGender;
bowler_num : byte;
name : tString32;
initials : String[3];
...
// Corresponding C# definition (unmanaged code)
[StructLayout(LayoutKind.Sequential, Pack=4)]
public unsafe struct tBowler_Rec
{
public tGender gender;
public byte bowler_num;
public fixed byte name[32];
public fixed byte initials[3];
...
Я действительно могу прочитать эту двоичную структуру из базы данных SQL Server и увидеть данные в отладчике Visual Studio. Ура! Я могу получить доступ к таким полям, как "пол" и "Bowler_num" без проблем. Ура!
В: Как мне превратить «имя» в строку C #?
Пример имени "ЭШТОН". В памяти это выглядит так:
\0x6ASHTON\0x0\0x0...
Вот как я пытаюсь получить к нему доступ:
[StructLayout(LayoutKind.Sequential, Pack=4)]
public unsafe struct tBowler_Rec
{
public tGender gender;
public byte bowler_num;
public fixed byte name[32];
...
public string Name
{
get
{
StringBuilder sb = new StringBuilder();
int ilen = name[0];
for (int i = 1; i <= ilen; i++)
sb.Append(name[i]);
return sb.ToString();
}
}
Я получаю эту ошибку:
Ошибка: нельзя использовать буферы фиксированного размера, содержащиеся в незафиксированном
выражения. Попробуйте использовать фиксированный оператор.
Помощь ?????
Заранее спасибо!