HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值 你好,

目前传入的customerId = 525040683,number类型 然后使用napi_get_value_int32(env, args[2], ¶m.customer_id); 去给param.customer_id去赋值,但是赋值一直失败,获取到的为0,但是如果使用一个8位数,使用相同方式就没问题,为什么9位数会出现这种情况呢?

其中param结构体如下:

typedef struct {
    int customer_id;
} MeetingPublicParams;

更多关于HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

改成以下试一下呢

typedef struct

{

int32_t customer_id;

} MeetingPublicParams;

参考以下:

cpp部分代码

// 将ArkTS value转为Node-API模块中的int32类型数据。
static napi_value GetValueInt32(napi_env env, napi_callback_info info) {

    size_t argc = 1;
    napi_value args[1] = {nullptr};
    int32_t result32 = 0;

    // 解析传递的参数
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

    // 将前端传过来的参数转为Node-API模块的int32类型
    napi_status status = napi_get_value_int32(env, args[0], &result32);

    // 如果传递的参数不是数字napi_get_value_int32接口将会返回napi_number_expected,设置函数返回nullptr
    if (status == napi_number_expected) {
        return nullptr;
    }

    // 调用napi_create_int32接口将int32类型的数据转为napi_value返回
    napi_value napiResult32 = nullptr;
    napi_create_int32(env, result32, &napiResult32);

    // 结构体
    typedef struct {
        int customer_id;
    } MeetingPublicParams;

    MeetingPublicParams params;
    params.customer_id = result32;

    OH_LOG_DEBUG(LOG_APP, "testTag:结构体中的customer_id:%{public}d", params.customer_id);

    return napiResult32;
}

接口声明

// index.d.ts
export const getValueInt32: (value: number | string) => number | void;

ArkTS侧示例代码

hilog.info(0x0000, 'testTag', 'tj get_value_int32_number %{public}d', entry.getValueInt32(525040683));

// hilog.info(0x0000, 'testTag', 'tj get_value_int32_number %{public}d', entry.getValueInt32(25040683));

更多关于HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题中提到的“HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值”的问题,这里给出直接相关的回答:

napi_get_value_int32 是 N-API(Node.js 的原生插件接口)中的一个函数,用于从 JavaScript 值中提取 32 位整数。由于 32 位整数的范围是 -2^31 到 2^31-1(-2147483648 到 2147483647),因此任何超出这个范围的数字都无法直接通过 napi_get_value_int32 赋值。

当你提到的“9位的number类型值”如果指的是超过 2147483647 的数字(例如 900000000 以上),那么它确实无法通过 napi_get_value_int32 正确赋值,因为该函数只支持 32 位整数范围。

解决方案可能包括:

  • 使用 napi_get_value_bigint64napi_get_value_biguint64(如果 N-API 支持)来处理更大的整数。
  • 将数字作为字符串处理,然后在需要的地方进行转换。
  • 如果业务逻辑允许,可以考虑将大数字拆分为多个小数字处理。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部