Помогите перевести процедуру с Delphi на c#

279
23 мая 2017, 00:12
procedure TTextField.Load(f:PText);
var tempstr:widestring;
    c,q,m,t:integer;
begin
   Clear;
   BlockRead(f^,m,sizeof(m));
     for q:=1 to m do 
        begin
            BlockRead(f^,t,sizeof(t));
            SetLength(tempstr,t);
            for c:=1 to t do 
                BlockRead(f^,tempstr[c],sizeof(tempstr[c]));
            Text:=Text+#13#10+tempstr;
        end;
end;

Вот эту процедуру не могу понять. Она должна читать из бинарного потока данные и заполнять ими поле Text. Вот процедура обратная этой(сохранение в файл):

procedure TTextField.Save(f:PText);
var c,t,l:integer;
    tempstr:widestring;
begin
      t:=1;
      BlockWrite(f^,t,sizeof(t));
      tempstr:=trim(Text);
      l:=length(tempstr);
      BlockWrite(f^,l,sizeof(l));
           for c:=1 to l do
                  BlockWrite(f^,tempstr[c],sizeof(tempstr[c]));

end;

Мне бы с# функцию) И если есть интерес - то напишите в скайп: jingle_of_coins. Эта процедурка лишь часть довольно большой работы...

Дополнение: Вот набросал что-то такое. Как думаете, эквивалентно?

public static string TTextFieldLoad(BinaryReader br)
    {
        int c = 0, q = 1, m = 0, t = 0;
        char[] tempstr = new char[1];
        m = br.ReadInt32();
        string text = "";
        for(q=1 ; q < m; q++)
        {
            t = br.ReadInt32();
            tempstr = new char[t];
            for(c = 1; c < t; c++)
            {
                tempstr[c] = br.ReadChar();
            }
            text += tempstr;
        }
        return text;
    }

Этот вариант не работает. Еще вот так попробовал(шел от обратного - смотрел как собирается блок):

public static string TTextFieldLoad(BinaryReader br)
    {
        int c = 0, q = 1, m = 0, t = 0;
        char[] tempstr = new char[1];
        while (true)
        {
            if (br.ReadInt32() == 1)
                break;
        }
        int l = br.ReadInt32();
        tempstr = br.ReadChars(l);
        return tempstr.ToString();
    }

Тоже выдает мусор.

READ ALSO
Передать текст для печати в делегат (консольное приложение)

Передать текст для печати в делегат (консольное приложение)

Вот есть пример, как вывести на печать текст, а как передать в PD_PrintPage мою структуру Transfer?

310
Изменить меню приложения

Изменить меню приложения

Можно ли с помощью WinApi или UIAutomation изменять названия пунктов меню стороннего приложения (WPF)?

241
Работа в спящем режиме на Android, Xamarin/C#

Работа в спящем режиме на Android, Xamarin/C#

Программа работает, пока устройство активно, как только экран гаснет, программа так же засыпаетКак заставить программу работать в фоновом...

252
C# - Как вывести новости на форму?

C# - Как вывести новости на форму?

Пишу программу на C# (Windows Forms)Начал изучать VK API, и нужно было вывести на форму новости (NewsFeed

317