perl,c,xs-解开浮点阵列



我有perl代码和c代码,我在我的perl代码中调用C函数。我通过包装将浮点数从perl到C传递给C(如http://www.perlmonks.org/?node_id = 39697),并且它运行良好!

my $p_angle = pack("f*", @angle);

,但是现在我试图将该数组从我的C函数返回到Perl,我希望能够使用它,例如读取值,打印...

我试图用

拆开它
my @array = unpack("f*", $entropy);

但这根本不起作用,当我打印@array时,我总是看到相同的不合理值。

所以我想我做错了,有人知道如何正确解开数组吗?

use strict;
use warnings;
use feature qw( say );
use Inline C => <<'__EOS__';
#include <stdio.h>
SV* test(SV* sv) {
   float* array;
   size_t num_eles;
   {
      STRLEN len;
      char* s = SvPVbyte(sv, len);
      num_eles = len/sizeof(float);
      /* We can't just cast s because we could */
      /* run afoul of alignment restrictions. */
      array = malloc(len);
      memcpy(array, s, len);
   }
   {
      size_t i;
      for (i=0; i<num_eles; ++i) {
         printf("%zu %.6fn", i, (double)(array[i]));
      }
   }
   {
      SV* return_sv = newSVpv((char*)array, num_eles*sizeof(float));
      free(array);
      return return_sv;  /* The typemap will mortalize. */
   }
}
__EOS__
my @a = (1.2, 1.3, 1.4);
say sprintf "%u %.6f", $_, $a[$_] for 0..$#a;
my $a = pack('f*', @a);
my $b = test($a);
my @b = unpack('f*', $b);
say sprintf "%u %.6f", $_, $b[$_] for 0..$#b;

相关内容

  • 没有找到相关文章

最新更新