为了账号安全,请及时绑定邮箱和手机立即绑定

你如何将 Rust 中的整数转换为 C 中的 char*

你如何将 Rust 中的整数转换为 C 中的 char*

PHP
慕沐林林 2021-07-02 09:01:56
我有以下用例。C 中的结构体如下所示:typedef struct _zend_internal_arg_info {    const char *name;    zend_type type;    zend_uchar pass_by_reference;    zend_bool is_variadic;} zend_internal_arg_info;通常该name字段包含一个函数名称。但是由于内部实现,这个字段也可以携带一个整数。在 C 端有一个宏在做这样的转换:(const char*)(unsigned long int)(1)我想要做的是在 Rust 端做同样的转换。我最终得到了以下代码:fn create_null_argument(required_args: u8, return_reference: bool) -> ZendFunctionArgument {    let required_args_ref = Box::into_raw(Box::new(required_args as i8)) as *const i8;    ZendFunctionArgument {        arg: php_bindings::_zend_internal_arg_info {            name: required_args_ref,            type_: 0,            pass_by_reference: if return_reference { 1 } else { 0 },            is_variadic: 0,        },    }}这似乎适用于以下测试:let arguments_ptr = ZendFunctionArguments::new(5, true).into_raw();unsafe {    let arguments: Vec<php_bindings::_zend_internal_arg_info> = Vec::from_raw_parts(arguments_ptr as *mut _, 1, 1);    let required_args = *arguments[0].name;    assert_eq!(5, required_args);}不幸的是,在 PHP 端(执行代码时),每次执行时该值都是完全随机的。我想在这里问的是,与在 C 端 ( (const char*)(unsigned long int)(1))上的转换相比,我转换 i8 的方式是否正确?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 272 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信