js二进制数据及其互相转化实现详解

JS二进制数据及其互相转化实现详解

什么是二进制数据

二进制数据,就是以二进制的形式保存的数据。计算机可以读取和理解二进制数据,因为计算机内部的运作机制就是二进制的。在JS中,可以通过两种方式来处理二进制数据,一种是通过ArrayBuffer对象,另一种是通过TypedArray视图。

ArrayBuffer对象

ArrayBuffer对象是JS中处理二进制数据的基础。它表示一个动态分配的内存区域,可以在这个内存区域中存储任意类型的数据。例如,我们可以创建一个长度为10字节的ArrayBuffer对象:

let buffer = new ArrayBuffer(10);

DataView视图

要操作ArrayBuffer对象中的数据,可以使用DataView视图。DataView视图提供了一系列方法,可以向ArrayBuffer对象中读写数据。

// 以字符串形式创建一个ArrayBuffer对象
let buffer = new ArrayBuffer(10);
// 创建一个DataView视图
let dataView = new DataView(buffer);
// 向DataView视图写入数据
dataView.setInt8(0, 1);
dataView.setInt16(2, 256);
// 从DataView视图读取数据
console.log(dataView.getInt8(0)); // 1
console.log(dataView.getInt16(2)); // 256

TypedArray视图

TypedArray视图是用来处理ArrayBuffer对象中特定类型的数据。JS提供了9种TypedArray视图,包括Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array、Float64Array和BigInt64Array。

// 把一个ArrayBuffer对象转化成TypedArray视图
let buffer = new ArrayBuffer(10);
let int8Array = new Int8Array(buffer);
let uint32Array = new Uint32Array(buffer);
// 向TypedArray视图写入数据
int8Array.set([1, 2, 3]);
uint32Array[1] = 256;
// 从TypedArray视图读取数据
console.log(int8Array[0]); // 1
console.log(uint32Array[1]); // 256

二进制数据和其他数据类型的相互转化

字符串和二进制数据的相互转化

字符串可以通过TextEncoder和TextDecoder对象和二进制数据相互转化。TextEncoder对象可以把字符串转化成二进制数据,TextDecoder对象可以把二进制数据转化成字符串。

let text = 'hello world';
let encoder = new TextEncoder();
let decoder = new TextDecoder();
let binaryData = encoder.encode(text);
let textData = decoder.decode(binaryData);
console.log(binaryData);
console.log(textData);

数组和二进制数据的相互转化

在TypedArray视图中,提供了两个方法buffer和from,可以用来把TypedArray视图和ArrayBuffer对象相互转化。

let int8Array = new Int8Array([1,2,3]);
let buffer = int8Array.buffer;
let array = Array.from(int8Array);
let newInt8Array = new Int8Array(buffer);
console.log(buffer);
console.log(array);
console.log(newInt8Array);

示例

示例1:使用AES算法加密二进制数据和解密二进制数据

const key = 'abcdefghijklmnop'.split('').map(c => c.charCodeAt(0));
const iv = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
//加密
function encryptAES(password, iv, data) {
  const cipher = new AES(key, iv);
  return cipher.encrypt(data);
}
//解密
function decryptAES(password, iv, data) {
  const cipher = new AES(key, iv);
  return cipher.decrypt(data);
}
const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const encryptedData = encryptAES(key, iv, data);
console.log(encryptedData);
const decryptedData = decryptAES(key, iv, encryptedData);
console.log(decryptedData);

示例2:使用Base64编码和解码二进制数据

const text = 'hello, world!';
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const binaryData = encoder.encode(text);
const base64Data = btoa(String.fromCharCode.apply(null, binaryData));
const decodedBinaryData = new Uint8Array(Array.prototype.map.call(atob(base64Data), c => c.charCodeAt(0)));
const decodedText = decoder.decode(decodedBinaryData);
console.log(base64Data);
console.log(decodedBinaryData);
console.log(decodedText);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js二进制数据及其互相转化实现详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 在页面上点击任一链接时触发一个事件的代码

    要实现在页面上点击任一链接时触发一个事件的代码,可以通过以下步骤来实现: 第一步:添加一个事件监听器 在页面中添加一个事件监听器来监听所有a标签的点击事件,代码如下: document.addEventListener(‘click’, function(event) { if (event.target.tagName === ‘A’) { // 点击事件…

    JavaScript 2023年6月11日
    00
  • JS面向对象编程实现的拖拽功能案例详解

    JS面向对象编程实现的拖拽功能案例,可以分为以下几个步骤: 1. 确定目标 首先要明确要实现的功能,即拖拽功能,定义需要拖拽的元素和拖拽的位置。 示例代码: let box = document.querySelector(‘.box’); // 需要拖拽的元素 let mouseX = 0; // 鼠标在x轴上的位置 let mouseY = 0; // …

    JavaScript 2023年5月28日
    00
  • JS中判断字符串存在和非空的方法

    JS中可以使用多种方法来判断字符串的存在和非空,以下是一些常见的方法和用法: 1. 使用typeof方法判断 可以使用typeof方法来判断字符串是否存在和非空。如果一个字符串存在,那么typeof将返回”string”,否则将返回undefined。可以将这个值与”string”进行比较来确定字符串是否存在。 var str1; if (typeof st…

    JavaScript 2023年5月28日
    00
  • js中的异常处理try…catch使用介绍

    下面是“JS中的异常处理try…catch使用介绍”的完整攻略。 概述 JavaScript 中的异常处理是许多开发者经常会遇到的问题,特别是在复杂、大型的应用程序中。如果没有适当的异常处理,运行时的错误可能会导致应用程序的崩溃,这对于用户来说是非常糟糕的体验。在 JavaScript 语言中,可以通过 try…catch 语句块来保护我们的程序如果…

    JavaScript 2023年5月28日
    00
  • asp.net实现删除DataGrid的记录时弹出提示信息

    ASP.NET 是微软公司的一种基于 .NET 框架的服务器端 Web 应用程序开发技术,而 DataGrid 是一个常用的 ASP.NET 控件之一,它能够将数据以表格的形式显示于网页上。通常在进行删除操作时,为了防止误操作和提醒用户删除的数据,我们需要弹出提示对话框。本文将为大家介绍如何实现在删除 DataGrid 中的记录时弹出提示信息。 实现步骤 添…

    JavaScript 2023年6月10日
    00
  • javascript 数组(list)添加/删除的实现

    下面是关于 JavaScript 数组添加/删除的实现攻略。 添加元素 使用 push() 方法 使用数组对象的 push() 方法可以实现末尾添加元素的功能。语法如下: arrayObject.push(element1, …, elementN) 示例: var fruits = ["Banana", "Orange&q…

    JavaScript 2023年5月27日
    00
  • Three.js加载外部模型的教程详解

    Three.js加载外部模型的教程详解 在Three.js中,我们可以使用OBJLoader或者GLTFLoader等加载外部模型格式,这个过程涉及到一个异步加载的概念,需要了解模型格式和Three.js的使用。 OBJLoader OBJLoader是Three.js中默认包含的加载OBJ格式模型的工具,我们可以通过以下代码引入: import { OBJ…

    JavaScript 2023年6月1日
    00
  • 跟我学习javascript的var预解析与函数声明提升

    下面就是“跟我学习JavaScript的var预解析与函数声明提升”的完整攻略。 JavaScript中的预解析 在JavaScript中,预解析是指在执行代码之前,将变量和函数的声明提前,这种行为称为预解析或者预编译。 var的预解析 在JavaScript中,var关键字声明的变量会在预解析阶段被提前声明。但是需要注意的是,只有声明会被提前,赋值不会被提…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部