Ir al contenido


Foto

convertir a str y viceversa los siguiente tipo de datos TByteArray, ArrayChar,..


  • Por favor identifícate para responder
7 respuestas en este tema

#1 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 26 junio 2011 - 12:29

Hola, querido foro estoy un poco mariado con las funciones de conversión de los siguiente tipo de datos.
Ando buscando las siguiente funciones:



delphi
  1. function ByteArraytostr(ba: TByteArray): string;
  2. function StrToByteArray(st: String): TByteArray;
  3.  
  4. function StrToWord(st : string): word;
  5. function WordToStr(wo : Word): string;
  6.  
  7. function StrToDWord(st : string): Dword;
  8. function DWordToStr(DW : DWord): string;
  9.  
  10.  
  11. funciton bytetostr(by:byte):string
  12. funcition strtobyte(st:string): byte



Desde ya muchas gracias.


  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 junio 2011 - 03:13

Esas conversiones, en el fondo, no son complicadas:



delphi
  1. uses Math;
  2.  
  3. function PByteArraytostr(ba: PByteArray): string;
  4. begin
  5.   Result:= String(PCHAR(ba));
  6. end;
  7.  
  8. function StrToPByteArray(st: String): PByteArray;
  9. begin
  10.   Result:= PByteArray(PCHAR(st));
  11. end;
  12.  
  13. function StrToWord(st : string): word;
  14. begin
  15.   Result:= WORD(Floor(StrTofloat(st)));
  16. end;
  17.  
  18. function WordToStr(wo : Word): string;
  19. begin
  20.   Result:= IntToStr(wo);
  21. end; 

   

He preferido sustituir las conversiones TBytaArray por PByteArray, pues ese tipo está pensado para usar su puntero. El resto de las conversiones numéricas son similares al caso de WORD.


Saludos.
  • 0

#3 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 27 junio 2011 - 10:06

Muchisimas gracias, me ahorras mucho tiempo.
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 28 junio 2011 - 07:19

Muchisimas gracias, me ahorras mucho tiempo.


Hola martín, ¿te ha resuelto la solución de escafandra?, si es así, para colocar el tema como resuelto. ;)

Saludos.
  • 0

#5 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 28 junio 2011 - 08:44

No del todo, tengo problemas con:



delphi
  1. function ByteArraytostr(ba: TByteArray): string;
  2. function StrToByteArray(st: String): TByteArray;



eh creado una funcion que los pasas, pero como el programa me devuelve basura no se si estaran bien, hoy a la noche me fijo, ahora no puedo.
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 28 junio 2011 - 12:01

Te comenté que no es muy apropiado el uso directo de TByteArray, entre otras cosas por que es muy largo. sizeof(TByteArray) = 32768, es decir cada variable que declares usa ese espacio, sin embargo al convertir punteros ocupa sólo lo que le toque.

Es mejor usar un puntero y para el caso es casi lo mismo aunque mas eficiente.

Si te empeñas en usar TByteArray:



delphi
  1. function ByteArrayToStr(ba: TByteArray): string;
  2. begin
  3.   Result:= String(PCHAR(@ba[0]));
  4. end;
  5.  
  6. function StrToByteArray(st: String): TByteArray;
  7. begin
  8.   Result:= PByteArray(PCHAR(st))^;
  9. end; 



Saludos.

  • 1

#7 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 28 junio 2011 - 09:17

Muchas gracias escafandra, no es que me empeñe en usar TByteArray, simplemente es lo que me devuelve funciones echas en una dll en c++ y quiero mostrar los resultados en una cajita de texto.
Tal vez que pueda modificar la forma en que se la llama, enseguida la pruebo y me fijo que si pongo el tema como solucionado.


  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 junio 2011 - 02:29

Muchas gracias escafandra, no es que me empeñe en usar TByteArray, simplemente es lo que me devuelve funciones echas en una dll en c++ y quiero mostrar los resultados en una cajita de texto.


TByteArray no es un tipo ANSI C ni WIN. Probablemente esa dll de devuelve un char*, char [], Byte* o Byte[], todos ellos equivalentes y representando un puntero. En delphi para para pasar de puntero a la variable que apuntan basta con poner ^ detras:


delphi
  1. var
  2. B: TByteArray;
  3. pB: PByteArray;
  4. begin
  5.   B:= pB^;



y para obtener un puntero:


delphi
  1. pB:= @B;



Ten mucho cuidado con los tipos pues un array de Bytes no siempre tiene una representación en un String, sobre todo en C. Cuando aparece un Byte Nulo (cero) la cadena de da por terminada, no así si lo tratamos de forma binaria.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.