Ich übergebe diese Binärdatei an binary_to_term/1. Soweit ich das beurteilen kann, ist es wohlgeformt und sollte vorübergehen, aber es verursacht einen Fehler. Kann mir jemand sagen warum?Warum ist diese Erlang-Binärdatei fehlgeschlagen binary_to_term/1?
> B = <<131,104,3,100,0,2,111,107,100,0,7,82,69,65,76,83,88,80,
108,0,0,0,1,70,127,240,0,0,0,0,7,162,106>>.
> binary_to_term(B).
** exception error: bad argument
in function binary_to_term/1
called as binary_to_term(<<131,104,3,100,0,2,111,107,100,0,7,82,69,65,76,83,88,
80,108,0,0,0,1,70,127,240,0,0,...>>)
der Dokumentation gehen, sollte die binäre wie folgt aufgliedern:
131 %% encoding version number
104 3 %% a tuple with three elements
100 0 2 111 107 %% the atom length 2 'ok'
100 0 7 82 69 65 76 83 88 80 %% the atom length 7 'REALSXP'
108 0 0 0 1 %% a list with one element
70 127 240 0 0 0 0 7 162 %% a float encoded in eight bytes
106 %% end of list
Giving etwas wie:
{ok, 'REALSXP', [123.456]}
Das einzige Bit, das nicht ganz klar scheint die schweben. Ist die acht Byte-Sequenz
<<127,240,0,0,0,0,7,162>>
gültig für einen Schwimmer codiert als "8 Bytes in Big-Endian-IEEE-Format"?
Wenn nicht die Float-Sektion, was sonst noch an dieser Binärdatei stürzt binary_to_term?
Mit Dank und die besten Wünsche
Ivan
Brilliant Antwort! Vielen Dank! Die Binärdatei kommt von einem C-Port und ein NaN passt perfekt. Ich werde es auf der C-Seite fangen und ändern, was gesendet wird. –