Имеется вот такая процедура чтения строки из бинарного файла(Delphi):
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;
Мне надо ее перевести на C#. Сделал вот так:
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();
}
Но выдает мусор. Возможно, я не от туда читаю. Гляньте вообще, соответствие. А то я в Delphi не бум-бум...
Вот мой код, который сработал.
FileStream fs = new FileStream("E:\\Users\\DezmontDeXa\\Desktop\\Tge\\PlanetQuestSP1\\Prison.qm", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
br.ReadBytes(82);//Перемещаюсь на позицию, откуда начинается текст
int strCount = br.ReadInt32();
string str = "";
for (int i = 0; i < strCount; i++)
{
int strLen = br.ReadInt32();
for(int c = 0; c < strLen; c++)
{
char ch = Encoding.Unicode.GetChars(br.ReadBytes(2))[0];
str += ch;
}
}
return str;
Вот перевод с Delphi на русский.
Прочитать из файла 4 байта, записать в m (это количество строк)
Нижеследующий текст повторить m раз
Прочитать из файла 4 байта, записать в t (это количество символов в следующей строке)
Установить у временного буфера tempstr длину t
Нижеследующий текст повторить t раз
Прочитать из файла 2 байта, интерпретируя их как символ в двухбайтового UNICODE, записать в буфер tempstr.
Добавить в выходной буфер text полученную в tempstr строку и символ перевода каретки.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Можно ли сделать так чтобы Form1 и From2 ссылались на один класс? Изначально была только Form1, после добавилась From2 с почти теми же функциями что...
Я создал модель данных DataBase-First, при этом в базе данных есть поля на подобии varchar(150)В классе же такие поля выглядят как просто string
Для создания файла Excel использую OpenXMLВ файле Excel нужна формула IF(