Uint8Array转buffer在HarmonyOS 鸿蒙Next中的结果异常

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

Uint8Array转buffer在HarmonyOS 鸿蒙Next中的结果异常

uint8Array 转 Buffer

/**
 * @param { Uint8Array } array - 字节数组 
 * @param { number } start - 可选,开始位置 默认 0 
 * @param { number } end - 可选,结束位置,默认 是 uint8Array 的长度 
 * @returns { string } 返回 16进制字符串 
 */
static uint8ArrayToBuffer(array: Uint8Array, start = 0, end?: number): ArrayBuffer {
    if (end === undefined) {
        end = array.length;
    }
    let resultAray = array.subarray(start, end)
    let result = resultAray.buffer
    return result
}

测试代码

let uint8Array_2 = new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]);
let buffer_2 = new Uint8Array([108, 108, 111, 32]).buffer;
let start = 2;
let end = 6;
let result:ArrayBuffer = uint8ArrayToBuffer(uint8Array_2,start,end);

最终得到的结果 result:ArrayBuffer 不等于 buffer_2, 我认为他们两应该是相等的


更多关于Uint8Array转buffer在HarmonyOS 鸿蒙Next中的结果异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

result 不等于 buffer_2 是因为 subarray() 返回的是一个新的、基于相同 ArrayBuffer、元素类型也相同的 TypedArray。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray

更多关于Uint8Array转buffer在HarmonyOS 鸿蒙Next中的结果异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请不要告诉我你这个小可爱的验证方法是result === buffer_2,不然我会狠狠地踢你的屁股的

这是什么类型,这是引用类型,引用类型能直接比值大小吗

在HarmonyOS鸿蒙Next系统中,当你遇到Uint8Array转换为buffer结果异常的问题时,这通常与数据类型的处理或内存管理有关。HarmonyOS基于其独特的系统架构和运行时环境,可能在处理JavaScript类型与原生类型之间的转换时有特定的行为。

要解决这个问题,你可以尝试以下方法:

  1. 确认转换方法:确保你使用的是正确的方法将Uint8Array转换为buffer。在JavaScript环境中,通常可以通过Uint8Array.buffer属性直接获取其底层ArrayBuffer。例如:

    let uint8 = new Uint8Array([1, 2, 3]);
    let buffer = uint8.buffer;
    
  2. 检查数据完整性:在转换前后检查Uint8Arraybuffer的内容,确保数据没有丢失或改变。

  3. 环境差异:考虑到HarmonyOS可能在不同设备或模拟器上有不同的行为,尝试在不同的环境中复现问题,看是否存在环境差异导致的问题。

  4. 查阅文档:查看HarmonyOS的官方文档,了解关于数据类型转换的特定说明或限制。

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

回到顶部