Czy w Delphi jest możliwa zmiana typu zmiennej np z Integer na String bez zmiany jej zawartości.
Pewnie że da się – trzeba przekopiować pamięć:
var
Num: UInt32 = $44434241;
Str: String;
begin
SetLength(Str, SizeOf(Num));
Move(Num, Str[1], SizeOf(Num));
Jeśli teraz wyświetlimy zawartość Str
:
WriteLn('Result: ', Str);
na wyjściu otrzymamy:
Result: ABCD
Procedura Move
kopiuje cztery bajty (bo tyle zajmuje typ UInt32
) ze zmiennej Num
w miejsce pierwszego znaku łańcucha Str
. Aby móc poprawnie przekopiować dane, najpierw musi zostać określona długość łańcucha (co wiąże się z alokacją pamięci).
Czyli najpierw przygotowyjemy docelowy obszar pamięci, a następnie kopiujemy dane.
Ja mam w zmiennej typu string np znak ":" co odpowiada znakowi ASC2 o numerze 58.
Nie ASC2, a ASCII – to nie jest rzymska dwójka, a dwie liery I od słów Information Interchange.
Chciałbym zmienić typ tej zmiennej na Integer tak aby te 58 zostało bez zmian.
Nie można zmienić typu zmiennej. Co najwyżej można jedną zmienną traktować na różne sposoby (za pomocą kilku różnie typowanych wskaźników lub przez rzutowanie) lub skopiować surową pamięć, bez konwersji danych.
Można mieć jedną zmienną do przechowywania danych różnego typu (sprawdź typ Variant
), jednak to zupełnie inna para kaloszy.