我有一个C++函数,它将int转换为void *.

void* get() {
  int a = 555;
  return (void*)a;
}

在我的PHP代码中,我调用这个C++函数,并希望将其返回值转换为int.

$ffi = FFI::cdef(
  "void* get();",
  "dllpath");

$voidptr = $ffi->get();

// convert void* to int

FFI::CAST("int",$voidptr)不起作用. 我try 的唯一成功方法是通过print_r($voidptr,true);打印$voidptr,然后通过常规匹配获得int值.有没有其他更好的办法?

谢谢你的帮助.

推荐答案

有两种方法:

  1. 将返回值声明为int:

    $ffi = FFI::cdef(
           "int get();",
           "dllpath");
    $intval = $ffi->get();
    
  2. 创建nullptr并减go 它:

    $nullptr = $ffi->cast('void*', 0);
    $intval = $voidptr - $nullptr;
    

Php相关问答推荐

用户信息更新期间Laravel邮箱验证问题

CodeIgniter AJAX表格提交中的CSRF token 再生问题

419注册期间Laravel 11中的错误

PHP FFI—Convert void * to int

启用额外的WooCommerce产品库存位置

自定义WooCommerce查询字符串仅显示前3个产品

如何使用php-amqplib连接到ActiveMQ Classic Docker镜像

WooCommerce基于元数据的自定义范围目录排序

如何删除Foreach语句中的重复值?

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

如何在PHP中组合日期范围

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

根据发货类别在WooCommerce产品页面中显示快捷代码

Laravel 在数据库上显示加密列

htaccess 重定向子域错误的 url

PHP 简单 XML Xpath 上移树(带有名称的父级)

注册命名空间后如何获取xml node 值?

Laravel路由中的符号在slug中会创建额外的斜杠

Laravel的Storage::exists返回false,而file_exists返回true.

在WooCommerce中显示 checkout 的高级自定义字段(Advanced Custom Fields)并保存其值