精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙二進制數組創建

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-01-31 15:24 ? 次閱讀

背景

c++層數據都是二進制,需要轉換成arrayBuffer透傳到ets層給業務使用,但是鴻蒙的使用下面兩個api創建出來的二進制數組數據都是錯誤的。

接口

napi_create_arraybuffer: 這個接口只能創建空的二進制數組,沒辦法把char的內容丟進去創建
napi_create_external_arraybuffer: 這個接口支持創建二進制數組時候丟入初始化參數,但是如果你data是非unsigned char。你里面的數據就會轉換錯亂,導致二進制的數據無法再轉換成正確的字符串

代碼實例

錯誤的代碼例子:

//接收ets傳入的string字符串
char type[64] = {0};
size_t eventTypeLen = 0;
napi_get_value_string_utf8(env, args[0], type, sizeof(type), &eventTypeLen);

//錯誤的二進制數組寫法
napi_value result1 = nullptr;
napi_create_external_arraybuffer(env, data, eventTypeLen, [](napi_env env, void *data, void *hint) {}, nullptr, &result1);
//這里返回的二進制數組到ets層,是無法正常轉換回字符串的
return result1;

正確的代碼例子:

//接收ets傳入的string字符串
char type[64] = {0};
size_t eventTypeLen = 0;
napi_get_value_string_utf8(env, args[0], type, sizeof(type), &eventTypeLen);
//正確,把type轉換成無符號的char*,然后作為參數傳入就可以得到正確二進制流
unsigned char *arrayBuffer = new unsigned char[sizeof(type)];
//復制內容
memcpy(arrayBuffer, reinterpret_cast(type), sizeof(type));
napi_create_external_arraybuffer(
env, arrayBuffer, eventTypeLen, [](napi_env env, void *data, void *hint) {}, nullptr, &result1);
//這里返回的二進制數組到ets層,正常轉換回字符串的
return result1;

創建方案二

1.方案二是創建一個空的arrayBuffer,然后給里面的data進行賦值,但是比較詭異我沒想懂的是,napi_create_arraybuffer 的第三個參數data,并沒有和第四個參數napi_value關聯,但是修改data的值確能應該arrayBuffer的值

//napi_create_arraybuffer的源碼
NAPI_EXTERN napi_status napi_create_arraybuffer(napi_env env, size_t byte_length, void** data, napi_value* result)
{
    NAPI_PREAMBLE(env);
    CHECK_ARG(env, data);
    CHECK_ARG(env, result);

    auto vm = reinterpret_cast(env)->GetEcmaVm();
    uint8_t** values = (uint8_t**)(data);
    Local res = panda::ArrayBufferRef::New(vm, byte_length);
    if (values != nullptr) {
        *values = reinterpret_cast(res->GetBuffer());
    }
    *result = JsValueFromLocalValue(res);

    return GET_RETURN_STATUS(env);
}

2.第二種創建方法例子

//接收ets傳入的string字符串
char type[64] = {0};
size_t eventTypeLen = 0;
napi_get_value_string_utf8(env, args[0], type, sizeof(type), &eventTypeLen);


    napi_value result2 = nullptr;
    void* data = nullptr;
    napi_create_arraybuffer(env, sizeof(type), &data, &result2);
    memcpy(data, type, sizeof(type));
    
    return result2;


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8496

    瀏覽量

    150834
  • 鴻蒙
    +關注

    關注

    57

    文章

    2307

    瀏覽量

    42738
  • HarmonyOS
    +關注

    關注

    79

    文章

    1967

    瀏覽量

    30015
收藏 人收藏

    評論

    相關推薦

    二進制顯示數組

    請教各位大神如何將一個十進制數組變成二進制顯示??我是初學者,在數組屬性里的顯示格式里,二進制不可選,是不是需要數據轉換???請各位大神不吝
    發表于 11-28 11:21

    二進制相對調相(二進制差分調相2DPSK)的工作原理

    二進制相對調相(二進制差分調相2DPSK)的工作原理
    發表于 10-21 13:01 ?3189次閱讀
    <b class='flag-5'>二進制</b>相對調相(<b class='flag-5'>二進制</b>差分調相2DPSK)的工作原理

    二進制

    二進制   二進制與十進制的區別在于數碼的個數和進位規律有很大的區別,顧名思義,二進制的計數規律為逢二進一,是以2為基數的計數體制。10這
    發表于 04-06 23:48 ?8168次閱讀
    <b class='flag-5'>二進制</b>

    C語言入門教程-二進制文件

    二進制文件 二進制文件非常類似于結構體數組,只不過這些結構體被保存在一個磁盤文件而非內存數組中。因為是使用磁盤保存二進制文件中的結構體,所
    發表于 07-29 14:24 ?1928次閱讀

    二進制時鐘電路

    二進制時鐘電路
    發表于 09-11 11:22 ?3107次閱讀
    <b class='flag-5'>二進制</b>時鐘電路

    同步二進制計數器

    同步二進制計數器 1.   同步與異步二進制加法計數器比較態序表和工作波形一樣電路結構不同:  異步二進制加法
    發表于 09-30 18:37 ?1.2w次閱讀
    同步<b class='flag-5'>二進制</b>計數器

    二進制編碼和二進制數據

    二進制編碼和二進制數據   二進制編碼是計算機內使用最多的碼制,它只使用兩個基本符號"0"和"1",并且通過由這兩個符號組成的
    發表于 10-13 16:22 ?4760次閱讀

    二進制數的運算規則

    二進制數的運算規則  二進制數之間可以執行算術運算和邏輯運算,其規則簡單,容易實現。  (1) 加法運算規則    0 + 0 = 0         例如:
    發表于 10-13 16:24 ?2.3w次閱讀

    什么是二進制計數器,二進制計數器原理是什么?

    什么是二進制計數器,二進制計數器原理是什么? 計數器是數字系統中用得較多的基本邏輯器件。它不僅能記錄輸入時鐘脈沖的個數,還可以實現
    發表于 03-08 13:16 ?3.1w次閱讀

    二進制電平,什么是二進制電平

    二進制電平,什么是二進制電平 在二進制數字通信系統中,每個碼元或每個符號只能是“1”和“0”兩個狀態之一。若將每個碼元可能取的狀態增
    發表于 03-17 16:51 ?2348次閱讀

    二進制加法程序【匯編版】

    二進制加法程序【匯編版】二進制加法程序【匯編版】二進制加法程序【匯編版】二進制加法程序【匯編版】
    發表于 12-29 11:02 ?0次下載

    二進制加法程序【C語言版】

    二進制加法程序【C語言版】二進制加法程序【C語言版】二進制加法程序【C語言版】二進制加法程序【C語言版】
    發表于 12-29 11:03 ?0次下載

    LabVIEW二進制數組轉換二進制字符串的詳細資料免費下載

    本文檔的主要內容詳細介紹的是LabVIEW二進制數組轉換二進制字符串的詳細資料免費下載,需要的下載吧。
    發表于 11-29 08:00 ?16次下載
    LabVIEW<b class='flag-5'>二進制</b><b class='flag-5'>數組</b>轉換<b class='flag-5'>二進制</b>字符串的詳細資料免費下載

    LabVIEW數值數組轉換二進制字符串的詳細資料概述

    本文檔的主要內容詳細介紹的是LabVIEW數值數組轉換二進制字符串的詳細資料免費下載,需要的下載吧。
    發表于 11-29 08:00 ?60次下載
    LabVIEW數值<b class='flag-5'>數組</b>轉換<b class='flag-5'>二進制</b>字符串的詳細資料概述

    二進制編碼器工作原理 如何選擇二進制編碼器

    二進制編碼器是一種數字電路,它將輸入的二進制代碼轉換為對應的輸出信號。在數字系統中,編碼器用于將數據從一種形式轉換為另一種形式,以便于處理和傳輸。 二進制編碼器工作原理 輸入與輸出關系 :
    的頭像 發表于 11-06 09:44 ?287次閱讀