[Gambas-devel] ideas for two new string functions

Ken Isaak ken.isaak at ...663...
Wed Nov 10 03:46:32 CET 2010


Does Gambas have something similar to the C library function
"sprintf"? A representation of the value could be written to
a buffer. This is still clumsy but faster than writing to a
file.

Sincerely:
Ken Isaak

On 11/09/2010 06:07 PM, Kevin Fishburne wrote:
> I'm currently having a hell of a time finding any way, much less an
> efficient one, to send multiple datatypes through a UDP socket as a
> single packet, then receive and re-assign them on the other end.
>
> The solution I've come with with is to create two conversion functions
> for each datatype. The first function converts the passed variable to a
> binary string and the second interprets the corresponding binary string,
> converting it back to its native datatype. Here's the obvious example:
>
> PUBLIC FUNCTION Byte2Binary(source AS Byte) AS String
>
>     ' Convert a byte datatype to a binary string and return it.
>     RETURN Chr$(source)
>
> END
>
> PUBLIC FUNCTION BinaryToByte(source AS String) AS Byte
>
>     ' Convert a binary string to a byte datatype and return it.
>     RETURN Asc(source)
>
> END
>
> Since we have Chr and Asc this is super easy, in fact, these my
> functions aren't really necessary in this case because it's so simple.
> What happens when working with single's, long's, float's, etc. however?
> Chr and Asc only work with single characters/bytes and aren't useful for
> 2, 4 or 8-byte datatypes.
>
> The hack I'm about to implement is to write the (let's say short)
> datatype to a temporary file, immediately read it back into a string and
> return the string. That gives me a nice "Short2Binary" function so I can
> then add the two-byte string to the packet being sent through the UDP
> socket. The corresponding conversion function, "Binary2Short" uses
> something like this:
>
> PUBLIC FUNCTION Binary2Short(source AS String) AS Short
>
>     ' Convert a binary string to a short datatype and return it.
>
>     RETURN Asc(Mid$(source, 2, 1)) * 256 + Asc(Mid$(source, 1, 1))
>
> END
>
> While that's so hacked-up I might be mistaken for an axe murderer, it
> should work.
>
> My suggestion, if it sounds useful to anyone, would be to make two new
> string functions similar to Chr and Asc but that work with more than one
> byte. One could then easily convert variables to strings, which could be
> sent as part of a network packet, then convert them back to their
> original datatypes on the receiving end.
>
> Please let me know if this is completely stupid because (hopefully)
> there is some other way. Thanks all.
>





More information about the Devel mailing list