<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    If you use <<1.0/float-native>><br>
    then it's just type cast to a 'double' pointer:<br>
    <br>
    double* my_array;<br>
    <br>
    my_array = (double*) Bin.data;<br>
    <br>
    printf("%lf", my_array[0]);<br>
    <br>
    <br>
    Default byte order is 'float-big', which will not work on little
    endian machines (x86).<br>
    <br>
    Depending on architecture you also might have to ensure 8 byte
    alignment.<br>
    x86 will accept unaligned floats but the performance may suffer.<br>
    <br>
    /Sverker, Erlang/OTP<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 06/20/2016 09:04 PM, John Duffy
      wrote:<br>
    </div>
    <blockquote
      cite="mid:16980831.78593.1466449486023.JavaMail.defaultUser@defaultHost"
      type="cite">
      <pre wrap="">Hi
I'm using FreeBSD 10.3 & Erlang 18.3 and I'm trying to get to grips with passing a binary of floats to a NIF for further processing as as array of C doubles.
My simple NIF module compiles and I can access my "my_nif_1" function from the erlang shell. I can access the 'size' structure member but I can't figure out how to access the 'data' structure member as a C array. I understand that 'data' is a block of memory of UINT bytes but I can't figure out how to "cast" this to a C array within the NIF.
Any help would be mud appreciated.
Kind regards
John 
#include "erl_nif.h"
static ERL_NIF_TERM my_nif_1(ErlNifEnv * env, int argc, const ERL_NIF_TERM argv[])
{
    ErlNifBinary Bin;
    if (!enif_inspect_binary(env, argv[0], &Bin)) {
        return enif_make_badarg(env);
    }
    // So far, so good...
    // From the erl shell...
    // my_nifs:my_nif_1(<<1.0/float>>). returns a Bin.size of 8
    // my_nifs:my_nif_1(<<1.0/float,2.0/float>>. returns a Bin.size of 16
    //
    // How do I access Bin.data as an array of doubles?
    //
    return enif_make_int(env, Bin.size); // For testing... this works.
}
static ErlNifFunc nif_funcs[] = {
    {"my_nif_1", 1, my_nif_1}
};
ERL_NIF_INIT(my_nifs, nif_funcs, NULL, NULL, NULL, NULL);

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
erlang-questions mailing list
<a class="moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>
<a class="moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>