HarmonyOS 鸿蒙Next napi_get_value_int32 无法赋值初9位的number类型值
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
改成以下试一下呢
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_bigint64
或napi_get_value_biguint64
(如果 N-API 支持)来处理更大的整数。 - 将数字作为字符串处理,然后在需要的地方进行转换。
- 如果业务逻辑允许,可以考虑将大数字拆分为多个小数字处理。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html