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