Array de byte a la conversión de cadena y retroceso -- arrays campo con delphi campo con indy camp Relacionados El problema

array of Byte to string and backwards conversion


2
vote

problema

Español

Hace algún tiempo necesitaba convertir la matriz de tipo de byte a TBYTES, que se realizó con la ayuda de Delphi Gurus aquí en SO;

Específicamente, necesitaba convertir datos para que pudiera extraer lo que UdpServer me dio en serverudpread en Indy 10.

Esta función fue hecha por @David Heffernan, y se publica sobre este tema: TECULO DE COMPATIBILIDAD DE INDY DE DELPHI XE3 entre TBYTES Y TIDBYTES

Entonces, estoy usando

  float r, float g, float b, float a0  

Para convertir esto a TBYTES y, como uno, puedo enviar este tipo a través del cliente UDP Sendbuffer.

Sin embargo, necesito hacer algunas modificaciones a los datos entre ellos, se reenvían; Leí la primera línea de matriz de byte que la Serverudpread entrega, a una cadena con esto:

  float r, float g, float b, float a111  

donde Adata es matriz de byte;

Ahora, ¿cómo podría hacer la conversión inverpera, para poder poner mi propia cadena en esta matriz Adata de byte en lugar de la que está actualmente allí, pero sin modificar otros datos dentro de la matriz, y luego convertirlo a tbytes?

¿Hay alguna manera de poner algo como float r, float g, float b, float a2 (este está mal, por supuesto ...) y luego convertirlo con CotyBytes a Tbytes, o tal vez convertirlo primero en TBYTES y luego reemplazarlo allí ...?

de cualquier manera sería útil.

Original en ingles

Some time ago I needed to convert Array of Byte type to TBytes, which was done with help of delphi gurus here on SO;

Specifically, I needed to convert data so that I could extract what UDPServer gave me on ServerUDPRead in Indy 10.

This function was made by @David Heffernan, and is posted on this topic: Delphi XE3 indy compatibility issue between tbytes and tidbytes

So, I'm using

function CopyBytes(const Bytes: array of Byte): TBytes; var   Count: Integer; begin   Count := Length(Bytes);   SetLength(Result, Count);   if Count > 0 then     Move(Bytes[0], Result[0], Length(Bytes)); end; 

to convert this to TBytes and as one I can then send this type via Client UDP SendBuffer.

However, I need to make some modifications to data between they are forwarded; I read first line of array of byte which the ServerUDPRead delivers, to a string with this:

var FirstString: string;  FirstString := PAnsiChar(@AData[0]); 

Where AData is array of byte;

Now, how could I do reverse conversion, so that I can put my own string to this AData array of byte instead of the one that is currently there, but without modifying any other data inside of the array, and then convert it to TBytes?

Is there a way to put something like AData[0]:=PAnsiChar(mystring); (this one is wrong, of course...) and then convert it with CopyBytes to TBytes, or maybe convert first to TBytes and then replace it there...?

Either way would be useful.

        
     
     

Lista de respuestas

9
 
vote

Indy tiene final float r; final float g; final float b; final float a;9 y rgbToFloat()0 Funciones para convertir entre rgbToFloat()1 y rgbToFloat()2 . Y si está utilizando Indy 10.6+, el rgbToFloat()3 tiene rgbToFloat()4 y rgbToFloat()5 Sobrecargas que toman 99887776626 Parámetros, Para que pueda usar rgbToFloat()7 y rgbToFloat()8 ARRANAS sin tener que copiar / desde rgbToFloat()9 .

 

Indy has BytesToString() and ToBytes() functions for converting between String and TIdBytes. And if you are using Indy 10.6+, the IIdTextEncoding interface has GetBytes() and GetString() overloads that take PByte parameters, so you can use TBytes and array of Byte arrays without having to copy to/from TIdBytes.

 
 

Relacionados problema

1  Delphi IDHTTP Server Cargar HTML  ( Delphi idhttp server load html ) 
He creado una aplicación VCL y necesito crear un servidor HTTP que se ejecute en mi red. He creado el código que puedes ver a continuación: procedure TForm...

1  Violación de acceso al cargar el manejador SSL al servidor IMAP en Indy  ( Access violation when loading ssl handler to imap server in indy ) 
Estoy tratando de asignar un TIdServerIOHandlerSSLOpenSSL A MI TIdImap4Server PERO SIGO SIGUIENTO TENGO UNA FUGA DE MEMORIA PUBLICADA POR LOS QUE EL CÓDIG...

0  ¿Cómo descargar más rápido?  ( How to download faster ) 
¿Cuál es la forma más rápida de descargar la fuente de la página web en un componente de memo? Yo uso los componentes de Indy y HTTPCLI. El problema es que ...

5  Solicitud de token de Delphi Google Oauth2 usando Indy HTTP obtener 400 mala solicitud  ( Delphi google oauth2 token request using indy http get 400 bad request ) 
Estoy tratando de solicitar acceso y actualizar tokens de Google usando OAUTH2, todo lo que recibe es un error "HTTP / 1.1 400 BAD SOLICITUD". Estoy usando ...

1  Proyecto Delphi - Versión de lanzamiento de la depuración x: problema con la biblioteca de Indy  ( Delphi project debug x release version problem with indy library ) 
Tenemos una solicitud de puerto de Delphi 7 a Delphi 2007, y la comunicación entre el servidor y el cliente de Indy 9 a Indy 10. La parte que verifica el no...

2  Indy - Realmente necesito galletas aquí?  ( Indy i really need cookies here ) 
Estoy desarrollando un proyecto para iniciar sesión automático en la página de administración de mi enrutador ... pero utiliza cookies en el código fuente. Cu...

3  ¿Indy soporta los sockets RAW TCP en Windows?  ( Does indy support raw tcp sockets on windows ) 
Soy un programador de C ++, pero mi pregunta es sobre la Biblioteca de Socket de la red Delphi Indy. Esencialmente, como Microsoft, los sockets sin procesar...

17  Cómo usar un DLL fuera de la ruta del sistema  ( How to use a dll outside of the system path ) 
Hice una aplicación que utiliza las DLL de OpenSSL ( libeay32.dll y ssleay32.dll ). Es Indy usándolos, no llamo directamente a las DLLs. La solución más s...

0  TidcookiManager & Redirecciones  ( Tidcookiemanager redirects ) 
Obtengo cookie de InternetGetCookieEx en la descargaCompleta WebBrwoser. Al intentar iniciar sesión en Hotmail, se obtiene, pero luego se redirige. A pesar de...

3  Envío de correos electrónicos con Indy con múltiples CC. Si uno es incorrecto, nadie recibe el correo  ( Sending emails with indy with multiple ccs if one is incorrect nobody recieves ) 
Actualmente configurando una pequeña herramienta para mi compañía que se usa para enviar correos de información a grupos de usuarios específicos. Pero si una ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos