Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Convertir variable a bytes (https://www.clubdelphi.com/foros/showthread.php?t=31890)

Status Quo 20-05-2006 19:57:40

Convertir variable a bytes
 
Hola a todos!

Estoy intentando convertir unas variables a tipo byte. Cómo lo hago? No encuentro ningún método apropiado y me he vuelto loco!

Hay métodos específicos para cada tipo de variable? No se, estoy hecho un lio.

Muchas gracias de antemano.

Status Quo

dec 20-05-2006 20:03:08

Hola,

Dices lo que quieres conseguir: una variable de tipo "Byte", pero, no dices de qué tipo es la variable que quieres convertir al tipo "byte".

Status Quo 20-05-2006 20:06:23

Lo que quiero es añadir unos caracteres a un stream. Había pensado que a lo mejor se podía hacer convirtiendo esos caracteres en tipo byte...

No se. Lo que quiero es dividir un fichero en trozos y enviarlos con una cabecera. (es para un protocolo de envío de ficheros entre pcs que estoy programando).

seoane 20-05-2006 20:18:00

No hay ningun problema es escribir strings o chars en un stream, no hace falta convertirlos en bytes. Por ejemplo:

Código Delphi [-]
var
  Stream: TMemoryStream;
  S: String;
  C: Char;
  Buffer: array[0..255] of byte;
begin
  S:= 'Hola mundo';
  C:= ',';
  FillChar(Buffer,Sizeof(Buffer),0);
  Stream:= TMemoryStream.Create;
  try
    // Podemos escribir un string
    Stream.WriteBuffer(PChar(S)^,length(S));
    // Podemos escribir un char
    Stream.WriteBuffer(C,1);
    // O un un array
    Stream.WriteBuffer(Buffer,Sizeof(buffer));
    // Y luego podemos guardarlo para ver como quedo
    Stream.SaveToFile('Prueba.txt');
  finally
    Stream.Free;
  end;
end;

Status Quo 20-05-2006 20:21:16

ahhh! gracias de verdad!!!!!!!!!!!Voy a probarlo inmediatamente.Ahora te cuento.
Un saludo
gracias

Status Quo 20-05-2006 20:29:51

Una cosa Seoane,

Podrías decirme cómo añado después los bytes del fichero y cómo extraigo del stream la información enviada en la cabecera??

Igual es una tontería pero estoy perdidísimo...

seoane 20-05-2006 20:54:11

Vamos a ver, sin saber lo que intentas hacer no se si podre ayudarte. Pero aqui te dejo dos ejemplos, puede que saques alguna cosa util de ellos:

En este ejemplo metemos en un stream una cabecera con el tamaño del archivo, y a continuacion el archivo.
Código Delphi [-]
var
  Stream: TMemoryStream;
  Archivo: TFileStream;
  Nombre: string;
  Cabecera: String;
begin
  // Nombre del archivo
  Nombre:= 'd:\Prueba.jpg';
  Stream:= TMemoryStream.Create;
  try
    Archivo:= TFileStream.Create(Nombre,fmOpenRead);
    try
      // En la acbecera vamos a colocar el tamaño del archivo
      Cabecera:= IntToStr(Archivo.Size);
      Stream.WriteBuffer(PChar(Cabecera)^,length(Cabecera)+1);
      // Y cargamos el resto del archivo
      Stream.CopyFrom(Archivo,0);
      // Ahora lo guardamos paar ver el resultado
      Stream.SaveToFile('d:\Archivo.bin');
    finally
      Archivo.Free;
    end;
  finally
    Stream.Free;
  end;
end;

En este otro cargamos un archivo en un stream, extramemos el contenido de la cabecera y a continuacion copiamos el resto del stream en otro stream.
Código Delphi [-]
var
  Stream: TMemoryStream;
  Archivo: TFileStream;
  Cabecera: String;
  Size: Integer;
begin
  // Nombre del archivo
  Stream:= TMemoryStream.Create;
  try
    Stream.LoadFromFile('d:\Archivo.bin');
    Archivo:= TFileStream.Create('d:\Prueba.jpg',fmCreate);
    try
      Cabecera:= String(PChar(Stream.Memory));
      ShowMessage(Cabecera);
      Size:= StrLen(PChar(Stream.Memory))+1;
      Stream.Seek(Size,soFromBeginning);
      Archivo.CopyFrom(Stream,Stream.Size-Size)
    finally
      Archivo.Free;
    end;
  finally
    Stream.Free;
  end;
end;

Status Quo 20-05-2006 21:01:44

Si, me has entendido!!! Gracias!! :) Gracias por tomarte la molestia de ayudarme. Ahora con lo que me has pasado voy a tratar de trocear el archivo y a cada trozo añadirle la cabecera. Me has sido de gran ayuda de verdad.Muchas gracias(a ver si lo consigo...que este programa me tiene de los nervios)

NOTA
Lo que intento hacer:
Intento poder mandar un fichero a trozos de un pc a otro. Cada trozo que envío tiene que tener una cabecera indicando el menos el tipo de trama que envío y el tamaño...no se explicarlo mejor...
Si lo consigo hacer lo publico...porque me está costando lo suyo...:confused:


La franja horaria es GMT +2. Ahora son las 11:04:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi