[Bro-Dev] #908: Need for function bytestring_to_double

Bro Tracker bro at tracker.bro-ids.org
Thu Oct 25 08:55:52 PDT 2012


#908: Need for function bytestring_to_double
------------------------------+-------------------------------
  Reporter:  carsten          |      Owner:
      Type:  Feature Request  |     Status:  needs information
  Priority:  Normal           |  Milestone:  Bro2.2
 Component:  Bro              |    Version:  git/master
Resolution:                   |   Keywords:
------------------------------+-------------------------------

Comment (by jsiwek):

 > - there is a check that the length of bytestring equals the length of
 the internal representation of double in "if ( s->Len() != sizeof(d))".

 Maybe it also needs a check that `sizeof(uint64) == sizeof(double)` since
 the bytes are copied to `uint64` storage first.

 > - the bit-pattern is first translated from network to host order before
 it is interpreted as double, to avoid invalid bitpatterns as may occur in
 ntohd().

 I don't get that entirely, I would have thought doing a `memcpy` in to
 `double` storage and then using `ntohd` would work, but maybe not.

 > - the bitpattern interpretation for a double is defined in IEEE 754,
 http://en.wikipedia.org/wiki/Double-precision_floating-point_format and I
 just *expect* every compiler on every platform to adhere to this spec.

 Yeah, I think in practice if you need to do byteswapping on floating point
 data types, treating it like an integer of same width might be ok.  More
 on that: http://en.wikipedia.org/wiki/Endianness#Floating-
 point_and_endianness

 {{{Because there have been many floating point formats with no "network"
 standard representation for them, there is no formal standard for
 transferring floating point values between heterogeneous systems.
 Theoretically, this means that even standard IEEE floating point data
 written by one machine might not be readable by another. However, on
 modern standard computers (i.e., implementing IEEE 754), one may in
 practice safely assume that the endianness is the same for floating point
 numbers as for integers, making the conversion straightforward regardless
 of data type.}}}

 Otherwise, I still wonder about the second bullet above and whether some
 type casts can be avoided.  And maybe the name should be
 `network_bytestring_to_host_double` to be clear there may be a byteswap
 operation in it.  Or just make separate BIFs for byte swapping bytestrings
 of various lengths and also separate bytestring to other data type
 conversion BIFs.

-- 
Ticket URL: <http://tracker.bro-ids.org/bro/ticket/908#comment:7>
Bro Tracker <http://tracker.bro-ids.org/bro>
Bro Issue Tracker



More information about the bro-dev mailing list