Blob 转 Uint8Array、Uint8Array 转 Blob、String 转 Uint8Array、Uint8Array 转 String、异或

Blob 转 Uint8Array

blobToArrayBuffer(blob, callback) {let reader = new FileReader();reader.onload = function() {return callback(this.result);}reader.readAsArrayBuffer(blob);
}

Uint8Array 转 Blob

// 假设我们有一个Uint8Array
const uint8Array = new Uint8Array([...]);// 转换为Blob
const blob = new Blob([uint8Array], { type: 'application/octet-binary' });

String 转 Uint8Array

在JavaScript中,将字符串转换为Uint8Array数组涉及到编码问题,因为字符串是由字符组成的,而Uint8Array是一个用于存储8位无符号整数的数组。通常,我们使用UTF-8编码将字符串转换为字节序列。

以下是一个函数,用于将字符串转换为UTF-8编码的Uint8Array

function stringToUint8Array(str) {  // 使用TextEncoder将字符串编码为Uint8Array  const encoder = new TextEncoder();  return encoder.encode(str);  
}  // 示例  
const str = "xyz";  
const uint8Array = stringToUint8Array(str);  console.log(uint8Array); // Uint8Array(3) [120, 121, 122]

在这个例子中,我们使用了TextEncoder接口,它提供了一个encode方法,可以将字符串编码为Uint8ArrayTextEncoder默认使用UTF-8编码。

请注意,TextEncoder可能在所有JavaScript环境中都可用,特别是在Web浏览器中。如果你在Node.js环境中工作,并且你的Node.js版本较旧,可能不支持TextEncoder。在这种情况下,你可以使用Buffer对象来实现相同的转换:

function stringToUint8ArrayNode(str) {  // 使用Buffer将字符串转换为Uint8Array  const buffer = Buffer.from(str, 'utf8');  const uint8Array = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);  return uint8Array;  
}  // 示例(Node.js环境)  
const str = "xyz";  
const uint8Array = stringToUint8ArrayNode(str);  console.log(uint8Array); // Uint8Array(3) [120, 121, 122]

在这个Node.js示例中,我们首先使用Buffer.from方法将字符串按照UTF-8编码转换为Buffer对象,然后从这个Buffer对象创建一个新的Uint8Array。这样做是因为Buffer对象在Node.js中用于处理二进制数据,并且可以与Uint8Array共享底层ArrayBuffer。

Uint8Array 转 String

function Uint8ArrayTostring(str) {  // 使用TextEncoder将字符串编码为Uint8Array  const encoder = new TextDecoder();  return encoder.decode(str);  
} 

异或

异或可以用于数据加密;

在JavaScript中,你可以使用ArrayBuffer和Uint8Array来处理二进制数据。以下是一个简单的函数,用于对两个二进制数组进行异或操作:

function xorBinaryArrays(arr1, arr2) {  // 确保两个数组长度相同  if (arr1.length !== arr2.length) {  throw new Error('Arrays must be of the same length');  }  // 创建一个新的Uint8Array,长度与输入数组相同  let result = new Uint8Array(arr1.length);  // 对每个元素进行异或操作  for (let i = 0; i < arr1.length; i++) {  result[i] = arr1[i] ^ arr2[i];  }  return result;  
}  // 示例  
let arr1 = new Uint8Array([1, 2, 3, 4, 5]);  
let arr2 = new Uint8Array([5, 4, 3, 2, 1]);  let xorResult = xorBinaryArrays(arr1, arr2);  console.log(xorResult);  // Uint8Array(5) [ 4, 6, 0, 6, 4 ]

这个xorBinaryArrays函数接受两个Uint8Array作为参数,并返回一个新的Uint8Array,其中的每个元素都是对应输入元素异或的结果。注意,这个函数假设输入的两个数组长度相同。如果长度不同,它将抛出一个错误。

在上面的示例中,我们创建了两个Uint8Array数组arr1和arr2,并将它们传递给xorBinaryArrays函数。然后,我们打印出异或操作的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python(8):文件的IO读写操作(操作普通文件/csv/excel)

文章目录 一、文件的IO读写操作1.常用的文件读取标志符2.普通文件的读操作 二、csv文件的读写操作1.读取操作2.读取时候跳过某一行3.列表方式写入csv文件4.字典方式写入csv文件 三、excel的数据操作&#xff08;非pandas模块&#xff09;1.读取excel的某个sheet的某一行的某一列…

【C++】stringstream

stringstream 定义于头文件 <sstream>&#xff0c;它其实是个别名&#xff0c;具体定义如下&#xff1a; typedef basic_stringstream<char> stringstream;<sstream> 定义了三个类&#xff1a;istringstream、ostringstream 和 stringstream&#xff0c;分别…

【WPF应用41】WPF中的Expander控件详解

Windows Presentation Foundation&#xff08;WPF&#xff09;中的Expander控件是一个用于显示详细信息的交互式UI元素。它允许用户通过点击标题来展开或折叠内容区域。Expander控件通常用于在界面上组织内容&#xff0c;提供一种可见/隐藏的功能&#xff0c;以帮助用户专注于当…

java数据结构与算法刷题-----LeetCode268. 丢失的数字

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 数学位运算 数学 解题思路&#xff1a;时间复杂度O( n n n)&…

锐腾授权世强硬创代理导热硅脂等热界面材料,最大化降低界面热阻

随着热界面材料下游新兴应用领域如数据中心、新能源汽车、可穿戴设备等的高速发展&#xff0c;其散热需求也将同步上升&#xff0c;国内热界面材料行业市场规模呈现上涨态势。 在此趋势下&#xff0c;国内锐腾新材料制造&#xff08;苏州&#xff09;有限公司&#xff08;下称…

从零到部署指南:Ubuntu上安装Boost和Crow库

1.安装boost 在安装Crow之前&#xff0c;需要确保您的系统中已经安装了Boost库。以下是Boost库安装步骤&#xff1a; 首先&#xff0c;从Boost官方网站或通过特定的链接下载Boost的源码&#xff0c;boost源码具体可参看这个链接&#xff1a; https://blog.csdn.net/duan199201…

Qt项目.pro文件配置详解

# Qt项目.pro文件配置详解#QT模块引入部分: QT core gui # 这一行指定了当前项目需要用到的Qt模块&#xff0c;其中core是基础模块&#xff0c;包含了Qt的基础功能&#xff1b;gui则是图形用户界面模块&#xff0c;用于创建和管理GUI应用。#条件编译部分: greaterThan(QT_MAJO…

vue3+高德地图+turfjs实现等压线,色斑图(用于显示气象,环境等地图场景)

首先是turf.js(英文官网),也有中文网不过也就目录翻译了一下. 高德官网自行获得key 使用turf的isobands api实现. 数据: 需要准备geojson格式经纬度信息业务值(比如温度,高度,光照只要是number值什么数据都可以) 国内各地区geojson数据点这里获得 参考的是这位大佬写的内容 我…

洛谷 - P1187 3D模型

3D模型 题目描述 一座城市建立在规则的 n m n \times m nm 网格上&#xff0c;并且网格均由 1 1 1 \times 1 11 正方形构成。在每个网格上都可以有一个建筑&#xff0c;建筑由若干个 1 1 1 1 \times 1 \times 1 111 的立方体搭建而成&#xff08;也就是所有建筑的底部…

Unity MySql安装部署与Unity连接 下篇

一、前言 上篇讲到了如何安装与部署本地MySql&#xff1b;本篇主要讲Unity与MySql连接、创建表、删除表&#xff0c;然后就是对表中数据的增、删、改、查等操作。再讲这些之前会说一些安装MySql碰到的一些问题和Unity连接的问题。 当把本地MySql部署好之后&#xff0c;我们可能…

rollup 插件架构-驱动设计 PluginDriver

文章目录 GraphPluginDriver生成 PluginDriver 实例和 PluginCache 缓存创建插件上下文 pluginContext初始化 pluginContext 缓存设置、方法插件中使用缓存可替换的 replace pluginContextPluginDriver 提供 asyn、first、parallel 等类型 hookgetSortedPlugins 运行时收集并存…

uniapp 小程序获取WiFi列表

<template><view ><button click"getWifiList">获取WiFi列表</button><scroll-view:scroll-top"scrollTop"scroll-yclass"content-pop"><viewclass"itemInfo"v-for"(item, index) in wifiList&…

网络原理(应用层、传输层)

文章目录 一、应用层1.1 自定义协议1.2 通用协议XMLJSONprotobuf 二、传输层2.1 UDP协议2.2 TCP协议协议端格式及解析可靠性机制确认应答超时重传连接管理&#xff08;三次握手&#xff0c;四次挥手&#xff09;流量控制拥塞控制 效率机制滑动窗口延迟应答捎带应答 粘包问题TCP…

3月产品更新来袭,快来看有没你期待的功能

亮点更新一览 增强制作报表易用性&#xff0c;提升用户体验&#xff0c;如仪表盘图层锁定保持原有层级、即席查询支持批量选择表字段。 增强报表展示和分析能力&#xff0c;满足更多项目需求&#xff0c;如仪表盘表格支持配置是否显示分析菜单按钮、Web电子表格新增多选输入…

Unity(MVC思想)

MVC 一下演示使用MVC和不使用MVC的做法区别。 前两个没有使用MVC 主面板逻辑&#xff1a; mainPanel是该脚本名字 每个场景中不一定存在该面板&#xff0c;单纯的显隐需要去手动挂载过于麻烦。 所以自己读取创建面板出来(每个场景仅创建一次)&#xff0c;存下该面板&#xf…

车载平板丨车载数据终端是什么,如何在农机领域发挥作用

车载数据终端是指一种能够获取和处理车辆及其周边环境信息的设备&#xff0c;它集成了GPS导航、行车记录仪、车况诊断、通信等功能&#xff0c;能够实时监测车辆的位置、速度、行驶路线、油耗等数据&#xff0c;为车辆管理和运营提供数据支持。在农机领域&#xff0c;车载数据终…

C++ //练习 11.16 使用一个map迭代器编写一个表达式,将一个值赋予一个元素。

C Primer&#xff08;第5版&#xff09; 练习 11.16 练习 11.16 使用一个map迭代器编写一个表达式&#xff0c;将一个值赋予一个元素。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*************************************…

负荷预测 | Matlab基于TCN-BiGRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-BiGRU-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab…

Ant Desgin Vue Tree Tab 个性化需求

背景 个人对前端不是很熟&#xff0c;或者说过目就忘&#xff0c;但是对前端还要求不少&#xff0c;这就难搞了。 使用的前端是Mudblazor和ant design vue, Mudblazor 还没有开始搞&#xff0c;现在先用ant design vue&#xff0c;版本是vue3&#xff0c; ant design vue 4版…

经典面试:MySQL的锁机制,表级锁和行级锁的使用场景及解决方案

大家好&#xff0c;今天我们来聊一聊MySQL中的锁机制&#xff0c;特别是表级锁和行级锁的使用场景和解决方案。锁机制是数据库管理系统中用来确保数据一致性和完整性的重要工具。MySQL为我们提供了多种锁机制&#xff0c;每种锁都有其特定的使用场景和注意事项。 一、MySQL的锁…