Comment copier un string dans un TByteDynArray ?

Comment copier un string dans un TByteDynArray ? - Delphi/Pascal - Programmation

Marsh Posté le 23-12-2010 à 12:57:01    

Bonjour à tous :)
 
Voilà : la question est toute bête, mais j'ai tout essayé (StrCopy() etc) rien ne passe. Et comme le TByteDynArray en question est dynamique, je ne peux pas savoir combien de cases il contient à sa déclaration n'est-ce pas ? Autrement, j'essayerais d'affecter chaque caractère de ma string à caque case du tableau.  
 
Si qqn peut m'aider, merci.  

Reply

Marsh Posté le 23-12-2010 à 12:57:01   

Reply

Marsh Posté le 23-01-2011 à 12:51:35    

Au cas où :
 
J'ai trouvé ça sur http://www.experts-exchange.com :
 
function StringToByteArray(const Str: string): TByteDynArray;
var
  MSTream: TMemoryStream;
  pTemp: pointer;
begin
  MStream := TMemoryStream.Create;
  MStream.Write(str,length(str));
  MStream.Position := 0;
 
  SetLength(Result, MStream.Size);
  pTemp := @Result[0];
  MStream.Position := 0;
  MStream.Read(pTemp^, MStream.Size);
 
  MStream.Free;
end;
 
 
function ByteArrayToString(const ByteArray: TByteDynArray): string;
var
  MStream: TMemoryStream;
begin
  MStream := TMemoryStream.Create;
  CopyToStream(ByteArray, MStream);
  MStream.Position := 0;
  try
    MStream.Read(result,MStream.Size);
  finally
    MStream.Free;
  end;
end;

Reply

Marsh Posté le 24-01-2011 à 08:20:26    

PatG a écrit :

Au cas où :
 
J'ai trouvé ça sur http://www.experts-exchange.com :
 
function StringToByteArray(const Str: string): TByteDynArray;
var
  MSTream: TMemoryStream;
  pTemp: pointer;
begin
  MStream := TMemoryStream.Create;
  MStream.Write(str,length(str));
  MStream.Position := 0;
 
  SetLength(Result, MStream.Size);
  pTemp := @Result[0];
  MStream.Position := 0;
  MStream.Read(pTemp^, MStream.Size);
 
  MStream.Free;
end;
 
 
function ByteArrayToString(const ByteArray: TByteDynArray): string;
var
  MStream: TMemoryStream;
begin
  MStream := TMemoryStream.Create;
  CopyToStream(ByteArray, MStream);
  MStream.Position := 0;
  try
    MStream.Read(result,MStream.Size);
  finally
    MStream.Free;
  end;
end;


 
Merci : je le note aussi. Le source et la source également !
 
J'avais trouvé ça :  
 
function StringToByteArray(const S: AnsiString): TByteDynArray;
var
  Len: Integer;
begin
  Len := Length(S);
  SetLength(Result, Len);
  Move(S[1], Result[0], Len);
end;
 
 

Reply

Marsh Posté le 26-01-2011 à 19:04:38    

plus court et facilement compréhensible : c'est mieux ;)

Reply

Marsh Posté le 27-01-2011 à 12:04:55    

PatG a écrit :

plus court et facilement compréhensible : c'est mieux ;)


Peut-être.  
 
Mais je n'aurais pas pensé à cette utilisation des streams. Il faut que je m'intéresse de plus près aux flux :heink: . En tout cas merci qd-même :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed