鸿蒙5.0开发常见问题【Native侧如何获取ArkTS侧的Uint8Array实例?】

ArkTS Uint8Array的传递方式与其他类型相同。

// ArkTS传递Uint8Array参数 
import testNapi from 'libentry.so'; 
 
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            let temp = new Uint8Array(2); 
            temp[0] = 1; 
            temp[1] = 2; 
            console.info(`Pure inputBuffer length: ${temp.length}`); 
            let res = testNapi.uintArr(temp); 
            console.info(`Pure outputBuffer: ${res}`); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

Native侧使用napi_get_typedarray_info方法获取Uint8Array的详细信息。

// Native侧获取Uint8Array参数并返回到ArkTS侧 
#include "UintArr.h" 
napi_value Demo1::UintArr(napi_env env, napi_callback_info info) { 
    size_t requireArgc = 1; 
    size_t argc = 1; 
    napi_value args[1] = {nullptr}; 
 
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 
 
    napi_value inputArray = args[0]; 
 
    // 获取ArrayBuffer类型 
    napi_typedarray_type type; 
    napi_value inArrayBuffer; 
    size_t byteOffset; 
    size_t length; 
    napi_get_typedarray_info(env, inputArray, &type, &length, nullptr, &inArrayBuffer, &byteOffset); 
    if (type != napi_uint8_array) { 
        return nullptr; 
    } 
     
    // 获取ArrayBuffer信息 
    void *data = nullptr; 
    size_t byte_length; 
    napi_get_arraybuffer_info(env, inArrayBuffer, &data, &byte_length); 
 
    // 构造ArrayBuffer并赋值 
    napi_value output_buffer; 
    void *output_ptr = nullptr; 
    napi_create_arraybuffer(env, byte_length, &output_ptr, &output_buffer); 
    napi_value outputArray; 
    napi_create_typedarray(env, type, length, output_buffer, byteOffset, &outputArray); 
    uint8_t *input_bytes = (uint8_t *)(data) + byteOffset; 
    uint8_t *array = (uint8_t *)(output_ptr); 
    for (size_t idx = 0; idx < length; idx++) { 
        array[idx] = 3; 
    } 
 
    return outputArray; 
}

index.d.ts声明接口。

export const uintArr: (a: Uint8Array) => object;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值