[Gambas-user] someshort="xy" returns "Wanted short, got string instead"

Benoît Minisini gambas at ...1...
Wed Oct 13 00:42:03 CEST 2010


>   I've had some trouble posting to the various GAMBAS mailing lists in
> the past and so have been using the Nabble forum, which generally has
> echoed my posted to the proper mailing list. It seems to not have been
> working so well recently though. As such I'm reposting my last post
> directly to the mailing list and hopefully it will be delivered. Here's
> the original thread for reference:
> 
> http://old.nabble.com/someshort%3D%22xy%22-returns-%22Wanted-short,-got-str
> ing-instead%22-td29715645.html#a29732625
> 

First : if you post on nabble, then nabble will post on the mailing-list. So 
you will logically have more problem than if you post directly.

Second : on a mailing-list, you never answer a thread with a mail that has no 
relation with it. So please post a new thread each time you start to talk 
about a new subject.

> ...
> 
> Basically I'm sending mixed datatypes as a single UDP packet. There may
> be 1024 Bytes followed by 512 Shorts, etc., in a known sequence that can
> be interpreted by the client.
> 
> When the client interprets the data in the received UDP packet it needs
> to assign different pieces of it to variables of varying datatypes. The
> string is constructed on one side then deconstructed on the other. There
> may be something fundamental that I'm missing (no surprise), but the
> packet data is being received as a String and as such I must convert
> segments of that string to the corresponding datatypes.
> 
> I'm currently trying to write a function to convert a four-byte segment
> of the string to a Single, and have a conversion module for all the
> other datatypes that could be encoded in the UDP string.
> 
> My current conversion function for Shorts is similar to Tobi's suggestion:
> 
> PUBLIC FUNCTION ToShort(source AS String) AS Short
> 
>    ' Convert a two-byte string to a short datatype value.
> 
>    RETURN Asc(Mid$(source, 2, 1)) * 256 + Asc(Mid$(source, 1, 1))
> 
> END
> 
> This works well, but I need similar functions for most common datatypes
> (Integer, Long, Single, Float). Is this possible, or am I making a
> fundamental programming mistake and there is an easier way? The app in
> question will push the limits of typical upstream bandwidth so I need to
> keep the packet size/frequency as low as possible. Most network
> transactions will not consist of arrays, but a few values that must be
> sent as raw data rather than numerical text strings.

There is no good solution in Gambas 2 to forge UDP packets except the one you 
did.

But in Gambas 3, the READ and WRITE instructions can serialize arrays and 
collection, and better, you have C-like structures. They are not serializable 
yet, but I should do that too if I keep being logical :-).

So I suggest you use Gambas 3! If you don't succeed in compiling it, please 
post all the details (again?). It should not be harder than making Ubuntu 
Maverick work with a nvidia card. :-) (took me a day, I should have stayed 
with my Mandriva).

Regards,

-- 
Benoît Minisini



More information about the User mailing list