Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2007
aluky aluky is offline
Registrado
 
Registrado: may 2007
Posts: 2
Poder: 0
aluky Va por buen camino
transformar array of bytes en string

Hola a todos, estoy haciendo una aplicación cliente servidor. Las comunicaciones se hacen con ipworks,lo que tengo que enviar lo tengo en un registro con varios campos. y me gustaría saber si hay alguna manera de transformar ese registro, de string, y despues de estring a registro otra vez.

Si no es posible, hay alguna manera de serializar, una clase con delphi 2006, o algún otro método para no tener que ir pasando todo a string a mano (tengo que enviar bastantes campos de distintos tipos cada uno), sino que se haga automáticamente?

gracias a todos.

Un saludo
Responder Con Cita
  #2  
Antiguo 30-05-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Una posible respuesta a tu prengunta, puede ser:
Código Delphi [-]
type
  TMyRecord = record
    Data: array[0..255] of byte;
  end;
...
var
  R: TMyRecord;
  S, Q: string;
begin
  { String a Array }
  S := 'Hola Mundo!';
  ZeroMemory(@R.Data[0], High(R.Data));
  StrPLCopy(@R.Data[0], S, High(R.Data));

  { Array a String }
  SetLength(Q, High(R.Data));
  Move(R.Data[0], Q[1], High(R.Data));

  ShowMessage(Q);

Ahora... yo no se para que utilizas el array de Bytes, pero viendo que lo quieres convertir a un string, supongo que estas almacenando cadenas de caracteres, o sea array de Chars no de Bytes. En ese caso el compilador te da una mano:

Código Delphi [-]
  TMyRecord = record
     CharData: array[0..50] of char;
  end;
...
var
  R: TMyRecord;
begin
  R.CharData := 'Hola Mundo!';
  ShowMessage(R.CharData);
Pero... si verdaderamente necesitas que sea un array de bytes, para facilidad yo definiría el registro de la siguiente manera, teniendo apuntado ambos tipos de array al mismo sector de memoria:

Código Delphi [-]
  TMyRecord = record
    case Integer of
    0: (
       ByteData: array[0..50] of byte;
       );
    1: (
       CharData: array[0..50] of char;
      );
  end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 02-06-2007
aluky aluky is offline
Registrado
 
Registrado: may 2007
Posts: 2
Poder: 0
aluky Va por buen camino
re: para que lo quiero

hola, Antes de nada gracias por contestar

te cuento lo que me hace falta con mas detalle.

tengo que comunicarne mediante tcp usando los componentes de ipworks, para manjar y almacenar los mensajes que tenemos que enviar vamos a utlizar una estructura de tipo record o una clase (delphi 2006). Cuando vayamos a enviar lo que se quiere hacer es coger e record o la clase (si se puede) y transformarlo en un chorro de bytes o en un PansiChar, que es lo que hay que pasarle al método send del componnete de ipqworks. Esto se que con los componentes de indy se puede hacer con rawtoBytes, pero con ipworks no se.

en el otro lado, al recibir se recoje un string, que habria que transformar otra vez en un record o en una clase.


bueno, gracias por anticipado por las respuestas
Responder Con Cita
  #4  
Antiguo 04-06-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Bueno, en ese caso si todos tus records son de utilizan tipos de tamaños fijos, puedes copiar directamente la memoria:
Código Delphi [-]
var
  R: TFloatingSaveArea; { Definido en la unit Windows }
  S: string;
begin
  { Record to String } 
  SetLength(S, SizeOf(TFloatingSaveArea));
  Move(R, S[1], SizeOf(TFloatingSaveArea));

  { String to Record } 
  Move(S[1], R, SizeOf(TFloatingSaveArea));
Debes tener en cuenta que en este ejemplo la copia del string al record, da por echo que el string tiene el tamaño y los datos acordes al registro.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pasar un array de chars a un string slok Varios 1 04-01-2007 19:02:53
Longitud maxima de un array tipo string!! cristian_abb Varios 5 25-07-2006 23:53:39
Convertir de String a un Array albertoP Internet 3 27-04-2006 22:20:50
Transformar un String[4] en un Real cmurua71 Varios 5 24-04-2006 19:47:49
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51


La franja horaria es GMT +2. Ahora son las 07:26:19.


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
Copyright 1996-2007 Club Delphi