[Gambas-devel] ideas for two new string functions

Benoît Minisini gambas at ...1...
Mon Nov 22 15:16:37 CET 2010


> 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.

I am agree with you. It will be a function that takes any value, and will 
return a binary string representation of it. If it takes a byte, it will 
return one character, if it takes an integer, it will return four characters, 
and so on. 

But I need to find a good name for that function, and I didn't yet!

-- 
Benoît Minisini




More information about the Devel mailing list