On 16 Apr 2012, at 00:38, Giuliano Colla wrote: > I'm dealing with a large number of data coming from an external device. > They are big-endian 16 bits signed numbers, which must be converted to > integer and to real to perform calculations. > > Besides the obvious solutions of treating them as isolated bytes, multipying > by 256 the highest, adding the lower, and oring wit $FFFF0000, or whatever > sizeof(Integer) suggests if the result is bigger than 32767, is there a more > efficient and elegant way to achieve the result?
Call BEtoN() on them (Big Endian to Native byte order). Note that this routine is overloaded for all integer sizes > 1, and that FPC extends the size of any number < 32/64 bits (depending on the architecture) to 32/64 bits when performing almost any operation on it. It's therefore probably the safest to call it as BEtoN(smallint(value)) to ensure that the correct overload is selected. Jonas_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal