[Lazarus-es] comportamiento erratico de TBase64EncodingStream
Rafael Bidegain
r.bidegain en gmail.com
Dom Oct 4 17:12:20 CEST 2009
hola!
El día 3 de octubre de 2009 19:17, JoshyFun <joshyfun en gmail.com> escribió:
> Hello Carlos,
>
> Sunday, October 4, 2009, 12:05:11 AM, you wrote:
>
> CGT> buffer2.Position := 0;
> CGT> EncodeStream.Write(buffer2, buffer2.size);
>
> EncodeStream.Write(buffer2.Memory^, buffer2.size);
Esto no funciona en el ejemplo de Carlos, pero si funciona en el mio.
>
> Le estabas mandando grabar no el stream, si no los datos, si no la
> dirección donde está almacenado el objeto "buffer2".
mmmm ¿que interesante!, toda esta información la obtuviste del código
fuente de la Unit o ¿hay documenación en otro lugar ?
>
> Otro modo más simple aquí sería:
>
> EncodeStream.CopyFrom(Buffer2,0); // 0 significa todo el stream.
ahora hay tres ejemplos y se armó una ensalada grandísima!!
1) La solución propuesta por Carlos en
http://lists.lazarus.freepascal.org/pipermail/lazarus-es/2009-October/001384.html
funciona bien, pude comprobar que Codea [0]
2) La solución propuesta por Carlos en
http://lists.lazarus.freepascal.org/pipermail/lazarus-es/2009-October/001383.html
funciona correctamente si reemplazo
EncodeStream.Write(buffer2, buffer2.size);
por
EncodeStream.CopyFrom(Buffer2,0);
tal como indica JoshyFun en su email.
3) El ejemplo que propuse yo al inicio del thread mejoró mucho con la
propuesta de JoshyFun
a la línea:
EncodeStream.Write(buffer, buffer.size);
la reemplace con:
EncodeStream.Write(buffer.Memory^, buffer.size);
Con esto el resultado ya no cambia en cada ejecución, aunque es
ligeramente diferente a las dos versiones de Carlos.
esto es lo que encodea (con la entrada "Memo1")
TWVtdDEK
pero el resultado correcto es:
TWVtbzEK
[0] desde una consola de linux ejecuto: echo "Memo1"|base64 y el resultado es
TWVtbzEK
--
Rafael Bidegain
Ya que los cuerdos no hablan, hablará el loco.
(The Fool, Padraic Pearse)
More information about the Lazarus-es
mailing list