AnsiString st2, st;
byte s;
TMemoryStream *ms;
st2="";
while (st2!=[COLOR="Red"]#00#00[/COLOR])
{
ms->Read(&s,sizeof(s));
st2=char(s);
ms->Read(&s,sizeof(s));
st2=st2+char(s);
if (st2==[COLOR="#ff0000"]#00#00[/COLOR])
{
Memo1->Lines->Add(st)
st="";
} else
st=st+st2;
}
Что значит #00#00?
while st2<>#00#00 do begin <...> end
как мне его запсиать на c++ Builder - что значит #00#00?
#00 ето символ с кодом 0
Цитата: Rebbit
#00 ето символ с кодом 0
я так и думал! :) а что он означает? пробел? или перенос строки (раз два символа...)
перенос строки = #13#10
0 ето вообще конец нольтерминальной строки.
А что он здесь значит я без понятия. Ето тебе по коду виднее :)
Цитата: Rebbit
Ето тебе по коду виднее :)
Код я указал в самом начале, т.е. внизу...
т.е. #0 (DELPHI) - это char(0) (С++ BUILDER), да?
Ето ведь у тебя условие выхода из цыкла. Значит st2 в цыкле изменяется. А вообще такое условие совсем непонятное. ИМХО Ктото кривой рукой писал.
Цитата: Rebbit
По томму коду что между begin end.
Ето ведь у тебя условие выхода из цыкла. Значит st2 в цыкле изменяется. А вообще такое условие совсем непонятное. ИМХО Ктото кривой рукой писал.
Ето ведь у тебя условие выхода из цыкла. Значит st2 в цыкле изменяется. А вообще такое условие совсем непонятное. ИМХО Ктото кривой рукой писал.
ок, завтра представлю код, где изменяется st2...
Код:
Я переписал код с DELPHI на C++ Builder, вот только то, что выделено жирным и красным никак понять не могу... Что же все-таки значит #00#00?
Цитата: frid-karatel
Код:
AnsiString st2, st;
byte s;
TMemoryStream *ms;
st2="";
while (st2!=[COLOR="Red"]#00#00[/COLOR])
{
ms->Read(&s,sizeof(s));
st2=char(s);
ms->Read(&s,sizeof(s));
st2=st2+char(s);
if (st2==[COLOR="#ff0000"]#00#00[/COLOR])
{
Memo1->Lines->Add(st)
st="";
} else
st=st+st2;
}
byte s;
TMemoryStream *ms;
st2="";
while (st2!=[COLOR="Red"]#00#00[/COLOR])
{
ms->Read(&s,sizeof(s));
st2=char(s);
ms->Read(&s,sizeof(s));
st2=st2+char(s);
if (st2==[COLOR="#ff0000"]#00#00[/COLOR])
{
Memo1->Lines->Add(st)
st="";
} else
st=st+st2;
}
Я переписал код с DELPHI на C++ Builder, вот только то, что выделено жирным и красным никак понять не могу... Что же все-таки значит #00#00?
А если подумать? )
Это конец юникодовой строки.
Токо, если ты уже используешь юникод в своем проекте, то для этого в билдере лучше использовать тип WideString вместо AnsiString.
Цитата: Dart Bobr
А если подумать? )
Это конец юникодовой строки.
Это конец юникодовой строки.
А почему два раза #00? Получается, два раза конец строки, ведь #00 - это уже конец строки, т.е. char(0)... Или что-то не так?
str2 != "\0\0" если ты этого хотел.
про Юникод тебе уже сказали, что лучше использовать WideString вместо ANSI
Код:
const WideString wsZero = "\0\0";
// Константа, чтобы избежать бесконечного приведения к WideString
WideString st2, st;
byte s;
TMemoryStream *ms = Создать_TMemoryStream;
st2="";
while (st2!=wsZero)
{
//А дальше всё по прежнему
}
// Константа, чтобы избежать бесконечного приведения к WideString
WideString st2, st;
byte s;
TMemoryStream *ms = Создать_TMemoryStream;
st2="";
while (st2!=wsZero)
{
//А дальше всё по прежнему
}
Приведение WideString к AnsiString (для добавления в TStrings) выполнится автоматически
Цитата: frid-karatel
А почему два раза #00? Получается, два раза конец строки, ведь #00 - это уже конец строки, т.е. char(0)... Или что-то не так?
Потому-что #00 - это ОДИН нулевой байт. А юникодовый символ занимает ДВА байта. char - это ОДНОБАЙТОВАЯ переменная. RTFM, ёпрст!!