Из этого разговора в IRC-канале Perl 6 и вопроса, опубликованного Мартином Бартом, я пытаюсь воспроизвести этот код C с использованием интерфейса Perl6 NativeCall, который используется с этой целью. Вот что я пробовал:
use NativeCall;
my uint32 $num = .new;
my num32 $float = .new: Num(1.0);
sub memcpy(num32 $float, uint32 $num, int32 $size) is native('Str') { * };
memcpy($float,$num,4);
say $num;
Это приводит к ошибке:
This type cannot unbox to a native integer: P6opaque, Any
Который я интерпретирую как, ну, вы объявили это как целое число, я не могу превратить его в сырую память, чтобы его можно было скопировать отсюда туда.
Это был только возможный способ ответить на более общий вопрос Мартина Барта: как превратить необработанные байты в число с плавающей запятой. Возможно, есть другой способ сделать это, но в любом случае мне было бы любопытно узнать, как превратить программы на C в эквиваленты NativeCall.
Обновление : тем временем вот оригинальный вопрос, который этот пост пытается решить для .