Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.05 c
3-1082363789
}|{yk
2004-04-19 12:36
2004.05.16
Как бы переписать такой запрос на Interbase


1-1083057757
ByPass
2004-04-27 13:22
2004.05.16
Memory Mapped Port


1-1083068103
Dysan
2004-04-27 16:15
2004.05.16
FileRead(iFileHandle, abBytes, iFileLength);?


14-1083141223
Andryk
2004-04-28 12:33
2004.05.16
Головоломка для автомобилистов :))))


1-1083165712
KEBZ
2004-04-28 19:21
2004.05.16
Memo и TXT