javascript无原生二进制字符串类型,其处理需依目标选择路径:转整数用parseint(str,2);转uint8array需按8位分组;有符号补码需通过int8array等视图 reinterpret 转换。

JavaScript 中没有原生的“二进制字符串”类型,所谓“二进制字符串”通常指形如 "10101100" 的由 '0' 和 '1' 组成的字符串。处理它的核心是明确目标:你是想把它转成数字、字节数组(Uint8Array)、Base64、还是用于网络/文件操作的二进制数据?不同目标对应不同转换路径。
把二进制字符串转成整数或字节
这是最常见需求。JavaScript 提供 parseInt(str, 2) 直接解析二进制字符串为十进制数:
-
parseInt("1100", 2)→12 - 若字符串长度是 8 的倍数(如 "11000011"),可按每 8 位切分,转成字节数组:
function binStrToBytes(binStr) {
const bytes = [];
for (let i = 0; i
<h3>把二进制字符串转成 ArrayBuffer 或 Blob</h3>
<p>当需要传给 <code>fetch</code>、<code>FileReader</code> 或 Canvas 等 API 时,得构造真正的二进制视图:</p>
- 先用上一步得到
Uint8Array - 再用
.buffer获取底层ArrayBuffer - 如需 Blob,可直接用
new Blob([uint8Array], {type: 'application/octet-binary'})
注意:不要尝试用 TextEncoder.encode() 处理纯二进制字符串——它会把每个字符('0'/'1')当 UTF-8 编码,结果完全不对。
把数字或字节反向转回二进制字符串
用 .toString(2) 可以转整数,但默认不补零,需手动对齐:
-
(255).toString(2)→"11111111"(刚好 8 位) -
(5).toString(2)→"101"(需补零到 8 位:使用.padStart(8, '0')) - 批量转字节数组:
bytes.map(b => b.toString(2).padStart(8, '0')).join('')
处理带符号或非标准长度的二进制串
如果字符串表示的是有符号整数(如补码),不能直接用 parseInt:
- 例如 "11111111" 在 8 位补码中是
-1,而parseInt("11111111", 2)得255 - 正确做法:先转为无符号数,再用
Int8Array视图 reinterpret:
const uint8 = new Uint8Array([parseInt("11111111", 2)]);
const int8 = new Int8Array(uint8.buffer);
console.log(int8[0]); // -1
类似地,16/32 位补码可用 Int16Array / Int32Array 处理。











