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

yizhihongxing

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日

相关文章

  • JS Array.slice 截取数组的实现方法

    JS Array.slice截取数组常用于从数组中获取一部分数组元素。以下是完整的攻略,包括:定义、参数、返回值、示例说明、应用场景等。 定义 Array.slice是数组的一个方法,用于截取数组的一部分,返回截取后的新数组,而不会修改原数组。 语法 array.slice(start, end) 参数 start:要截取的开始下标,从0开始。 end:要截…

    JavaScript 2023年5月27日
    00
  • HTML5中的websocket实现直播功能

    下面是关于“HTML5中的WebSocket实现直播功能”的完整攻略: 一、什么是WebSocketWebSocket是一个协议,它提供了在单个TCP连接上进行全双工通信的能力,并能够让服务器主动向客户端推送数据。相比于HTTP,WebSocket的一个明显优点就是它的实时性更高,因为不需要为了发送数据而频繁地建立和关闭TCP连接。 二、创建WebSocke…

    JavaScript 2023年6月11日
    00
  • JS中作用域和变量提升(hoisting)的深入理解

    作用域和变量提升是JavaScript中非常重要的概念。作用域指的是程序中变量的可访问范围,而变量提升意味着变量和函数声明可以在实际声明之前使用。理解这些概念可以帮助开发人员编写更好的JavaScript代码,并帮助他们避免错误。 作用域 JavaScript中有两种作用域:全局作用域和局部作用域。全局作用域的变量在整个程序中都是可访问的,而局部作用域的变量…

    JavaScript 2023年5月28日
    00
  • 结合AJAX进行PHP开发之入门

    结合AJAX进行PHP开发之入门 的攻略如下: 1. AJAX 是什么? 首先来了解一下 AJAX。AJAX(Asynchronous JavaScript And XML) 即异步 JavaScript 和 XML 的技术组合,能够异步处理网页,实现局部刷新,并无需刷新整个页面。AJAX 使用 XmlHttpRequest 对象来向服务器发送请求和接收响应…

    JavaScript 2023年6月11日
    00
  • JavaScript 五大常见函数

    JavaScript 五大常见函数 在 JavaScript 编程中,有五大常见函数,它们分别是:parseInt()、parseFloat()、isNaN()、toFixed() 和 toString()。下面我们将结合代码示例来详细讲解这五大常见函数。 parseInt() parseInt() 方法将一个字符串进行解析,返回整数值。 // 示例1 le…

    JavaScript 2023年5月18日
    00
  • js实现特别简单的钟表效果

    当开发一个网站时,增加一个钟表效果可以有效地增加用户的交互性和娱乐性。在JavaScript中实现一个钟表的效果十分简单。我们可以通过JavaScript调用内置的Date对象来获取当前时间,并通过一些数学计算将其转化为时针、分针和秒针的指针位置。以下是实现这个效果的步骤: 1. HTML结构 首先,我们需要在页面中添加一个标记,我使用div来存放我的时钟。…

    JavaScript 2023年5月27日
    00
  • .Net 单例模式(Singleton)

    单例模式(Singleton)概述 单例模式是设计模式中一种常见的创建型模式,其定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。使用单例模式可以确保一个类只被创建一次,并且该类的唯一实例可以被进行全局访问和控制。 在 .Net 中,单例模式可以应用于许多场景,例如控制数据库连接、记录系统日志、全局配置信息等等。下面将介绍如何在 .Net 应用程…

    JavaScript 2023年5月28日
    00
  • JavaScript基础语法之js表达式

    让我们一起来详细讲解一下“JavaScript基础语法之js表达式”的完整攻略。 什么是JavaScript表达式? JavaScript表达式是JavaScript中计算值的一种方法。表达式可以是简单的数学计算、变量、函数调用,或者由运算符和操作数组成的复杂语句。在JavaScript中,任何使用分号(;)结尾的操作都是表达式。 在JavaScript中,…

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