Casting Array of Char to Array of Byte

Delphi

28/02/2005

Tem alguma possibilidade de transforma um Array of Char para um Arrya of Byte, e se tiver alguem poderia me passar um Exemplo.


Melo

Melo

Curtidas 0

Respostas

Beppe

Beppe

28/02/2005

type
  TCharArray = array[0..10] of Char;
  TByteArray = array[0..10] of Byte;
var
  A: TCharArray;
begin
  ...TByteArray(A)...
end;


Mas acho que é melhor vc dizer a sua intenção, tvz haja um outro jeito(como castar apenas um elemento invés de o array inteiro)


GOSTEI 0
Melo

Melo

28/02/2005

Obrigado pela ajuda.
mas estava pensando mais ou menos assim

var
vChar : array [1..5] of char
vByte : array[1..5] of byte;
i : integer;
Begin
// O array pode ter qq tipo de caracter.
for i := 0 to 5 do
vByte[i] := vChar[i]; -> é aki o meu problema
// Caso eu faça isso
-> vByte[i] := ord(vVchar[i]) // os dados vem de forma inconsistente quando irei gravar no banco a informação não esta correta para depois recuperar ela.

end;


GOSTEI 0
Beppe

Beppe

28/02/2005

Primeiro, tem um problema no seu loop. Vc inicia com 0, invés de 1. Prefira fazer ´for I := Low(vChar) to High(vChar) do´

Tvz consertando isso, vc resolve o problema, pois não consigo ver inconsistência, a não ser que vc se refira a alguma conversão UTF que precise, etc...


GOSTEI 0
Melo

Melo

28/02/2005

Beppe,
Obrigado pela atenção.
Desculpe a minha ignorancia :oops:
Mas o que seria uma Conversão UTF ?, poderia colocar um exemplo


GOSTEI 0
Beppe

Beppe

28/02/2005

UTF é um ´padrão´ Unicode, para representar caracteres de virtualmente todos os idiomas. Em uma string normal, cada byte é um caracter. Em UTF(aí tem UTF-8, UTF-16), um caractere pode ocupar mais bytes, dependendo de qual é.

No Delphi 7(acredito que no 6 também), tem as rotinas AnsiToUtf8 e Utf8ToAnsi, que convertem texto para UTF-8 e vice-versa, respectivamente.

Explique melhor seu problema, eu não creio que seja realmente isso.


GOSTEI 0
Melo

Melo

28/02/2005

Beppe,
Montei o For conforme vc descreveu e funcionou perfeitamente
for I := Low(vChar) to High(vChar) do´

Muito Obrigado.


GOSTEI 0
Beppe

Beppe

28/02/2005

Sempre prefira Low e High, que retornam os ´bounds´ de arrays, invés de colocar os valores diretamente no código. Será uma fonte de bug a menos nos programas. :wink:


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

28/02/2005

vc também poderia usar um ´absolute´

var
  vChar: array[1..5] of Char;
  vByte: array[1..5] of Byte absolute vChar;
begin
  //aqui não precisa fazer nada pra copiar um para o outro
  //fazer vByte[X] seria o mesmo que Ord(vChar[X])
end;



GOSTEI 0
POSTAR