Текущий архив: 2004.05.16;
Скачать: CL | DM;
Внизarray of char --> String Найти похожие ветки
← →
Vadim S_ (2004-04-29 13:48) [0]Как правильно перевести данные из
array of char --> String
сейчас написано
for i:=0 to Length(C)
do S := S + C[i];
но наверное есть способ проще?
Подскажите плиз.
← →
Johnmen © (2004-04-29 13:49) [1]Move
← →
Андрей Сенченко © (2004-04-29 14:07) [2]Johnmen © (29.04.04 13:49) [1]
System.pas
procedure Move( const Source; var Dest; count : Integer );
{$IFDEF PUREPASCAL}
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);
D := PChar(@Dest);
if S = D then Exit;
if Cardinal(D) > Cardinal(S) then
for I := count-1 downto 0 do
D[I] := S[I]
else
for I := 0 to count-1 do
D[I] := S[I];
end;
В чем принципиальное отличие ?
← →
Goida © (2004-04-29 14:15) [3]
> Vadim S_
Если объявить массив чаров с нуля:
... :array [0..N] of char;
то он будет (должен быть) совместим с pchar. Ну а pchar совместим с string (в Delphi)
← →
han_malign © (2004-04-29 14:21) [4]SetString(S, C, sizeof(C));
← →
Тимохов © (2004-04-29 14:24) [5]
> Андрей Сенченко © (29.04.04 14:07) [2]
в том, что purepascal не определен и move работает на asme (вы этот кусок выкинули), т.е. быстрее...
← →
Goida © (2004-04-29 14:31) [6]Где в вопросе о скорости. Ему нужно проще и понятнее...
← →
Тимохов © (2004-04-29 14:35) [7]Где в вопросе о "понятнеe"...
"Проще" же понятие растяжимое - кому проще - автору или процессору.
← →
Anatoly Podgoretsky © (2004-04-29 14:39) [8]А где в вопросе о скорости или о понятиях, ему как присвоить
← →
Goida © (2004-04-29 14:42) [9]
> Vadim S_
Ты что-нибудь пробовал из того, что здесь показали?
← →
Тимохов © (2004-04-29 14:48) [10]var
s: array of char;
ss: string;
begin
setlength(s, 5);
s[0] := "d";
s[1] := "i";
s[2] := "m";
s[3] := "a";
s[4] := #0;
ss := pchar(s); /////
showmessage(ss);
end;
← →
han_malign © (2004-04-29 14:50) [11]>и move работает на asme (вы этот кусок выкинули), т.е. быстрее...
- ага, а все остальное на 8-байтовом Ява-коде работает?procedure _LStrFromPCharLen(var Dest: AnsiString; Source: PAnsiChar; Length: Integer);
asm
{ -> EAX pointer to dest }
{ EDX source }
{ ECX length }
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX
MOV ESI,EDX
MOV EDI,ECX
{ allocate new string }
MOV EAX,EDI
CALL _NewAnsiString
MOV ECX,EDI
MOV EDI,EAX
TEST ESI,ESI
JE @@noMove
MOV EDX,EAX
MOV EAX,ESI
CALL Move
{ assign the result to dest }
@@noMove:
MOV EAX,EBX
CALL _LStrClr
MOV [EBX],EDI
POP EDI
POP ESI
POP EBX
end;
← →
Тимохов © (2004-04-29 14:51) [12]
> - ага, а все остальное на 8-байтовом Ява-коде работает?
и к чему это?
← →
Андрей Сенченко © (2004-04-29 14:52) [13]Тимохов © (29.04.04 14:24) [5]
(вы этот кусок выкинули), т.е. быстрее...
сначала запостил, потом только увидел {$ELSE}
Страницы: 1 вся ветка
Текущий архив: 2004.05.16;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.041 c