js二进制及其相关转换全总结

简介: 【8月更文挑战第9天】js二进制及其相关转换全总结

JavaScript 提供了强大的处理二进制数据和各种格式之间转换的能力。在这篇总结中,我们将深入探讨 JavaScript 中的二进制操作及其相关转换,并包含代码示例。

1. 二进制表示

在 JavaScript 中,数字通常以 64 位浮点数表示(符合 IEEE 754 标准),但二进制字面量和位运算符则基于 32 位整数进行操作。你可以使用 0b 前缀来表示二进制字面量。

let binaryNum = 0b1010; // 二进制的 10
console.log(binaryNum); // 输出: 10

2. 位运算符

JavaScript 中的位运算符基于 32 位整数进行操作。常见的位运算符包括:

  • AND (&):对每个位执行逻辑与操作。
  • OR (|):对每个位执行逻辑或操作。
  • XOR (^):对每个位执行逻辑异或操作。
  • NOT (~):对每个位进行取反操作。
  • 左移 (<<):将位向左移动指定数量的位。
  • 右移 (>>):将位向右移动指定数量的位(保留符号位)。

示例:

let a = 5;  // 二进制: 0101
let b = 3;  // 二进制: 0011

console.log(a & b); // 输出: 1  (二进制: 0001)
console.log(a | b); // 输出: 7  (二进制: 0111)
console.log(a ^ b); // 输出: 6  (二进制: 0110)
console.log(~a);    // 输出: -6 (二进制: 1010, 因为在 JavaScript 中是补码形式)
console.log(a << 1); // 输出: 10 (二进制: 1010)
console.log(a >> 1); // 输出: 2  (二进制: 0010)

3. 数字与二进制字符串之间的转换

数字转二进制字符串

JavaScript 提供了 toString 方法可以将数字转换为二进制字符串。

let num = 10;
let binaryStr = num.toString(2);
console.log(binaryStr); // 输出: "1010"

二进制字符串转数字

可以使用 parseInt 方法将二进制字符串转换为数字。

let binaryStr = "1010";
let num = parseInt(binaryStr, 2);
console.log(num); // 输出: 10

4. Buffer 和 TypedArray

在处理二进制数据时,JavaScript 提供了 Buffer(Node.js 中)和 TypedArray,它们用于处理原始二进制数据。

使用 Buffer (Node.js)

let buf = Buffer.from([0x1, 0x2, 0x3, 0x4]);
console.log(buf); // 输出: <Buffer 01 02 03 04>

使用 TypedArray (浏览器和 Node.js)

let buffer = new ArrayBuffer(4); // 创建一个 4 字节的缓冲区
let view = new Uint8Array(buffer); // 创建一个 8 位无符号整数的视图

view[0] = 1;
view[1] = 2;
view[2] = 3;
view[3] = 4;

console.log(view); // 输出: Uint8Array(4) [1, 2, 3, 4]

5. 二进制与 Base64 之间的转换

Base64 编码常用于将二进制数据转换为文本字符串,以便在文本协议中传输(如 HTTP)。在 JavaScript 中可以使用 btoaatob 方法。

二进制数据转 Base64

let binaryStr = "Hello, world!";
let base64Str = btoa(binaryStr);
console.log(base64Str); // 输出: "SGVsbG8sIHdvcmxkIQ=="

Base64 转二进制数据

let base64Str = "SGVsbG8sIHdvcmxkIQ==";
let binaryStr = atob(base64Str);
console.log(binaryStr); // 输出: "Hello, world!"

6. 使用 DataView 处理复杂的二进制数据

DataView 允许在 ArrayBuffer 上进行更多样化的操作,可以按任意字节序和数据类型读取和写入数据。

示例:读取 32 位整数

let buffer = new ArrayBuffer(4);
let view = new DataView(buffer);
view.setInt32(0, 25, true); // 写入一个 32 位整数,little-endian
console.log(view.getInt32(0, true)); // 输出: 25

结论

通过以上内容,我们可以看出,JavaScript 提供了多种处理二进制数据的方法,从简单的位运算到更复杂的 BufferTypedArray,以及二进制数据和其他格式(如 Base64)之间的转换。这些工具在现代 Web 开发和 Node.js 开发中非常有用,可以帮助开发者更高效地处理二进制数据。

目录
相关文章
|
5月前
|
前端开发 JavaScript 数据安全/隐私保护
JavaScript 中的二进制散列值和权限设计
这篇文章介绍了JavaScript中使用位运算符进行权限控制的方法。文章首先介绍了JavaScript中的进制类型,包括十进制、二进制、十六进制和八进制。然后解释了位运算符的概念和常用的按位与、按位或、按位异或和按位非操作符。接下来讨论了位运算符在传统权限系统中的应用场景,并给出了一个基于二进制变量表示权限的示例。最后,文章提到了位运算符方案的局限性,例如每个权限码必须是唯一且只有一位为1的限制。但总的来说,在中小型业务中可以使用这种方式进行权限控制。
|
2月前
|
JavaScript 前端开发
JS二进制转10进制、十六进制
JS二进制转10进制、十六进制 【8月更文挑战第9天】
79 6
|
5月前
|
JavaScript 前端开发 数据处理
掌握JavaScript中的二进制运算,提升你的编程技能!
掌握JavaScript中的二进制运算,提升你的编程技能!
|
5月前
|
存储 自然语言处理 前端开发
详谈JavaScript 二进制家族:Blob、File、FileReader、ArrayBuffer、Base64
详谈JavaScript 二进制家族:Blob、File、FileReader、ArrayBuffer、Base64
200 1
|
5月前
|
算法 JavaScript
JS算法-颠倒二进制位
JS算法-颠倒二进制位
|
5月前
|
存储 移动开发 自然语言处理
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(下)
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(下)
107 0
|
5月前
|
XML JavaScript 前端开发
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(上)
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(上)
168 0
|
算法 JavaScript 前端开发
【JavaScript数据结构与算法】字符串类(计算二进制子串)
【JavaScript数据结构与算法】字符串类(计算二进制子串)
|
存储 JavaScript 前端开发
Javascript 操作二进制数据
一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区
86 0
Javascript 操作二进制数据
|
存储 XML 前端开发
JS的二进制家族:Blob、ArrayBuffer和Buffer
ArrayBuffer:前端的一个通用的二进制缓冲区,类似数组,但在API和特性上却有诸多不同
JS的二进制家族:Blob、ArrayBuffer和Buffer