AnsiString para String

Delphi

10/05/2023

Bom dia, preciso converter uma variável do tipo AnsiString em String, sabem me dizer se isso é possível?
Bruno Batista

Bruno Batista

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

10/05/2023

Do Pascal ao Delphi, o uso de strings passou por muitas modificações e depende de que estágio da modificação estamos falando.

No início, a linguagem Pascal nem possuía o datatype String. Era comum utilizar um (array[...] of char) para isso, que tinha tamanho fixo.
Depois criaram o tipo String, que correspondia a uma LString (primeiro byte indicando o tamanho limitado a 255), com tamanho máximo pré-alocado.
Em seguida, veio a AnsiString, sem o limite de 255 caracteres, que passou a ser o tipo String padrão, em contrapartida ao tipo ShortString (LString). Este último com controle de tamanho, reference count e terminada com um #0, semelhante à StringZ (PChar).
Este tipo foi atualizado para UnicodeString, que mantém um byte por caractere.
Também existe o WideString, que armazena 2 bytes por caractere.

No geral, atribuir o conteúdo de uma variável a outra leva a uma conversão implícita. A questão é, como lidar com diferenças de "locale", que podem atribuir códigos diferentes para caracteres acentuados.

É uma boa pergunta.

A unit System (implícita) costuma ter um monte de funções para conversão de datatypes. Dá para olhar a unit e procurar. Eu não tenho acesso às versões mais recentes do RAD Studio para checar, mas fiquei curioso também.
GOSTEI 0
Paulo Silva

Paulo Silva

10/05/2023

Bom dia, preciso converter uma variável do tipo AnsiString em String, sabem me dizer se isso é possível?


Bruno, vc conseguiu chegar em uma solução para a conversão de AnsiString em String. Estou usando uma aplicação onde tudo esta em AnsiString e a minha vai ler em String do Delphi10. Ai como o Desphi 10 a string é um unicodestring ele fica dando a mensagem de que pode ocorrer a perda de dados.
Fiz muitas pesquisas que dizem que não a problema que a utilização é normal e que o problema mesmo seria passar uma String para uma AnsiString sem converter. Porém ao compilar fica aquele monte de warns chatos.

Dessa forma gostaria de ter uma solução pra isso.
Se tiver solução compartilha pra ajudar a todos.

No meu caso estou lendo os dados de uma porta serial que traz dados de peso de uma balança. O componente é todo em AnsiString (ACBr) e a minha aplicação é String e nessa comunicação a leitura vem correta porém fica a duvida de surgir a tal perda de dados.
GOSTEI 0
POSTAR