ES6 JS 关于字符串和数组之间的转换

2023-11-10

ES6 JS 关于字符串和数组之间的转换

// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function(bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('');
}

// 16进制字符串转ArrayBuffer
function hex2ab(value) {
  var typedArray = new Uint8Array(value.match(/[\da-f]{2}/gi).map(function(h) {
    return parseInt(h, 16)
  }))
  var buffer = typedArray.buffer;
  var bufLen = buffer.byteLength;
  if (Math.floor(bufLen % 20) != 0) {
    var fillBuffer = new Uint8Array(Math.ceil(bufLen / 20) * 20);
    fillBuffer.set(typedArray);
    buffer = fillBuffer.buffer;
  }
  return buffer;
}

/**
 * 字符串转16进制(只支持16进制的字符串)
 */
function strToHexCharCode(str) {  
  if (str === "") return "";  
  var hexCharCode = [];
  for (var i = 0; i < str.length; i++) {
    hexCharCode.push((str.charCodeAt(i)).toString(16));  
  }
  return hexCharCode.join("");
}

// 异或
function XOR(b, len) {
  var tmp = b[0];
  for (var i = 1; i < len; i++) {
    tmp ^= b[i];
  }
  return tmp;
}

// byte[]转整形
function bytesToLong(bytValue) {
  var ret = 0;
  for (var i = 0; i < bytValue.length; i++) {
    ret += (bytValue[bytValue.length - i - 1] & 0xFF) << (i * 8);
  }
  return ret;
}

/**
 * 十六进制转字符串
 */
function hexCharCodeToStr(hexCharCodeStr) {  
  var trimedStr = hexCharCodeStr.trim();  
  var rawStr = trimedStr;  
  var len = rawStr.length;  
  if (len % 2 !== 0) {
    console.log("Illegal Format ASCII Code!");
    return "";  
  }  
  var curCharCode;  
  var resultStr = [];  
  for (var i = 0; i < len; i = i + 2) {    
    curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
        
    resultStr.push(String.fromCharCode(curCharCode));  
  }  
  return resultStr.join("");
}

#//================================js=============================



 var str = "ABCD,;'/,][;'85*&%$#@!}{\nABCD,;'/,][;'';/.,<{]~`!85*&%$#@!}{\n";

    let intArray = strToIntArray(str);
    let toStr = byteArrayToStr(intArray);
    console.log("toStr==数组转字符串====" + toStr)
    let toHex = byteArrayToHex(intArray);
    console.log("===数组转十六进制字符串======" + toHex)
    let toByte = hexStrToByte(toHex);
    let toStrOld = byteArrayToStr(toByte);
    console.log("toStr==数组转字符串==toStrOld==" + toStrOld)

    /**
     *byte[] 数组转十六进制字符串
     * @param strValue byte[] 数组
     * @returns {string}
     */
    function byteArrayToHex(arrayValue) {
        var hexStr = "";
        for (var arrayItem of arrayValue) {
            var charHex = arrayItem.toString(16);
            charHex = (Math.floor(charHex.length % 2) == 0) ? charHex : `0${charHex}`;
            hexStr = `${hexStr}${charHex}`;
        }
        return hexStr.toLocaleUpperCase();
    }

    /**
     * 十六进制字符串转byte[]
     * @param hexStrValue 十六进制字符串
     *
     */
    function hexStrToByte(hexStrValue) {
        var hexValueLen = hexStrValue.length;
        var arrayCode = [];
        if (Math.floor(hexValueLen%2)!=0){
            hexStrValue = `${hexStrValue}0`;
        }
        for (var i=0;i<hexValueLen;i+=2){
            var itemValue = hexStrValue.substring(i,i+2);
            arrayCode.push(parseInt(itemValue,16))
        }
        return arrayCode;
    }


    /**
     * byte[] 转字符串
     * @param byteArrayValue 数组
     * @returns {string}
     */
    function byteArrayToStr(byteArrayValue) {
        var str = "";
        for (var arrayItem of byteArrayValue) {
            str = `${str}${String.fromCharCode(arrayItem)}`;
        }
        return str;
    }

    /**
     * 字符串转byte[]
     * @param strValue ASCII字符串
     * @returns {Array}数组
     */
    function strToIntArray(strValue) {
        var intAray = [];
        var valueLen = strValue.length;
        for (var i = 0; i < valueLen; i++) {
            intAray.push(strValue.charCodeAt(i));
        }
        return intAray;
    }

//结果
toStr==数组转字符串====ABCD,;'/,][;'85*&%$#@!}{
ABCD,;'/,][;'';/.,<{]~`!85*&%$#@!}{

Conversion.html?_ijt=ol6i0r2lhnq35vp2tllh27lcug:19 ===数组转十六进制字符串======414243442C3B272F2C5D5B3B2738352A2625242340217D7B0A414243442C3B272F2C5D5B3B27273B2F2E2C3C7B5D7E602138352A2625242340217D7B0A
Conversion.html?_ijt=ol6i0r2lhnq35vp2tllh27lcug:22 toStr==数组转字符串==toStrOld==ABCD,;'/,][;'85*&%$#@!}{
ABCD,;'/,][;'';/.,<{]~`!85*&%$#@!}{
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 JS 关于字符串和数组之间的转换 的相关文章

  • js 保留6位有效数字,直接舍去,不四舍五入

    function sixNum num return Math floor num 1000000 1000000 sixNum 12 123456789 12 123456
  • angular 根据当前日期显示本周,上周,本月,上月,本季度,本年度时间段

    angular Date处理模块 根据当前日期获取本周 上周 本月 上月等时间段 知识准备 Date对应方法 getDate 返回月中的第几天 从 1 到 31 getDay 返回星期几 0 6 setDate day 设置 Date 对象
  • JavaScript、图片防盗链

    文章目录 防盗链方式 HTTP Referer 检查 CORS 跨域资源共享 Token 验证 服务器端限制 生成临时链接 水印 防盗链方式 HTTP Referer 检查 HTTP Referer 是一个 HTTP 头部字段 它包含了请求
  • Vue前端开发中的输入限制与输入规则探究

    前言 在Vue前端开发中 我们经常需要对用户的输入进行限制和规范 以确保数据的准确性和安全性 本文将介绍如何使用Vue的el input组件来实现输入限制和输入规则 并提供相应的代码示例 一 输入限制 最大长度限制 我们可以使用maxlen
  • vue首屏优化

    先分析加载慢的原因 再做优化 1 首先安装webpack的可视化资源分析工具 命令行执行 npm i webpack bundle analyzer D 2 然后在webpack的dev开发模式配置中 引入插件 代码如下 const Bun
  • vue3-实现父子组件之间的通信(详解+源码)

    前言 vue3相对于vue2的父子传参方式有所改变 本文介绍三种 父组件给子组件传参 父组件调用子组件内的方法 子组件调用父组件的方法 如果不需要一种一种看可以直接下滑看全部代码 有注释也蛮好理解 一 父组件给子组件传参 1 父组件给子组件
  • [Vue warn]: Error in render: “TypeError: Cannot read properties of undefined(reading“toString“)

    描述 在我们写了大量的标签但是实际上却出现了无任何东西 一查看控制台就出现了这样的错误提示 解决思路 渲染错误 TypeError 无法读取未定义的属性 读取 toString 全局搜友toSrtring 无变量toString 但是有一个
  • ES6之Map和Set有什么不同?

    一 Map 1 定义 Map是ES6提供的一种新的数据结构 它是键值对的集合 类似于对象 但是键的范围不限于字符串 各种类型的值都可以当做键 Object结构是 字符串 值 的对应 Map结构则是 值 值 的对应 2 代码示例 Map本身是
  • vue3+element+sortablejs实现table表格 行列动态拖拽

    vue3 element sortablejs实现table动态拖拽 1 第一步我们要安装sortablejs依赖 2 在我们需要的组件中引入 3 完整代码 4 效果 5 扩展 判断要拖动的行能不能拖动并放置到新位置 1 第一步我们要安装s
  • 计算至少需要多少个快递主站点javascript

    题目 题目描述 快递业务范围有N个站点 A站点与B站点可以中转快递 则认为A B站可达 如果A B可达 B C可达 则A C可达 现在给N个站点编号0 1 n 1 用s i j 表示i j是否可达 s i j 1表示i j可达 s i j
  • vue3中使用pinia(大菠萝)状态管理仓库

    在Vue 3中 状态管理是非常重要的一部分 而Pinia 大菠萝 作为一个全新的状态管理库 在Vue 3中提供了更好的状态管理方案 可以方便地实现任意组件之间数据共享 与VueX不同的是 Pinia并不依赖于Vue 3的响应式系统 而是通过
  • 常用的vue指令语法用法

    一 v text 相当于js的innerText 二 v bind 动态绑定属性 简写是冒号 三 v on 绑定事件 简写是 用于事件的绑定类似于js的onclick 四 v model 可以用 v model 指令在表单
  • AngularJS学习之全局API(应用程序编程接口)

    1 AngularJS全局API用于执行常见任务的Javascript函数集合 比较对象 迭代对象 转换对象 2 全局API函数使用angularJS对象进行访问 以下是通用API函数 angular lowercase 转换字符串为小写
  • 事件循环机制分享

    Event Loop 即事件循环 是JavaScript或Node为解决单线程代码执行不阻塞主进程一种机制 也就是我们所说的异步原理 要了解事件循环机制首先要了解进程 线程 宏任务 微任务 进程 Process 是计算机中的程序关于某数据集
  • 如何在JavaScript中实现链式调用(chaining)?

    聚沙成塔 每天进步一点点 专栏简介 JavaScript中的链式调用 示例 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅 这个专栏是为那些对We
  • python执行JavaScript代码

    1 简单使用 import execjs execjs eval new Date 返回值为 2018 04 04T12 53 17 759Z execjs eval Date now 返回值为 1522847001080 需要注意的是返回
  • js下载流文件

    const request new XMLHttpRequest const resourceUrl hostUrl request open POST resourceUrl true request setRequestHeader A
  • JavaScript对象的创建方式有几种?

    在JavaScript中 有多种方式可以创建对象 包括以下几种 对象字面量 Object Literals 这是创建对象最简单的方式 使用花括号 来定义对象 通过键值对的方式来定义对象的属性和方法 let person name John
  • 如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器

    如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器 摘要 在本教程中 您将学习如何使用MySQL Workbench将MySQL样本数据库加载到MySQL数据库服务器 之后 您将有 classicmodels 示
  • ECMAScript简介及特性介绍

    ECMAScript 简称ES 是JavaScript的规范 同时也是被广泛采用和实现的脚本语言标准 从最初的1996年推出第一版至今 ECMAScript已经经历了数十年的发展和改进 成为了互联网开发中的重要基石之一 本文将对ECMASc

随机推荐

  • 关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException

    关于Springcloud的RestTemplate使用服务名报异常java net UnknownHostException和使用localhost 8081报异常java lang IllegalStateException No in
  • ConstraintLayout基本使用之toLeftOf 、toTopOf、toRightOf、toBottomOf

    关于ConstraintLayout的博客 文章想必大家已经见过很多了 都是很全面的 今天这篇博客主要将ConstraintLayout的 layout constraintLeft toLeftOf layout constraintLe
  • HTML常考知识点和面试题

    保证页面不会出现编码问题 乱码 宽度等于设备宽度 初始化比例等于1 最大初始化比例等于1 user scalable no 将控制用户无法进行触屏扩大或缩小网页 适配移动端的第一步加上viewport 再针对手机屏幕大小调整 指定一个基础的
  • 【LeetCode队列】933 最近的请求次数 RecentCounter(java实现)

    文章目录 题目描述 一 解题思路 二 代码 1 最近的请求次数 2 测试数据 3 复杂度分析 4 执行时间 题目描述 写一个 RecentCounter 类来计算特定时间范围内最近的请求 请你实现 RecentCounter 类 Recen
  • 2023-04-29 读取内容为十六进制数字的txt文件转换为二进制文件

    读取内容为十六进制数字的txt文件转换为二进制文件 前言 一 示例代码 总结 前言 一个有趣的题目 读取txt文件内容两两结合 存储为dat文件 实现十分简单 有很多有意思的回答 但大都是python 其实这个用C的格式化读取fscanf
  • DC/DC:单端反激直流变换电路设计及matlab/Simulink仿真

    直流单端反激变换电路在开关管导通时电源将电能转为磁场能储存在变压器中 当开关管关断时再将磁能转变为电能传送到负载 单端反激变换电路是由升降压 Buck Boost 变换电路派生而来的 电路图如图所示 参数计算 理论计算可参考Buck Boo
  • 通过hyperledger fabric理解区块链存储

    hyperledger fabric 是一个联盟链框架 基于这个框架的最简单案例 A与B转账 我们来理解一下什么是区块链 第一个问题 区块链是干什么用的 很多人想到了比特币 以太坊等等 那具体是干什么用的呢 实际上可以理解为一个特别的数据存
  • ERROR: cannot launch node of type [map_server/map_server]: map_server等

    问题说明 在运行Autolabor simulation中README md的Quick start时 roslaunch simulation launch gmapping navigation launch 出现了以下错误 发现找不到
  • phpstudy安装和使用

    一 phpstudy 1 下载网址 http www xp cn 2 过程 1 往下拉可以看到推荐版本我下载的是8 1版本 注意下载路径不可以有中文或空格 2 按需下载 3 安装完成后解压 点击这个一步一步做就可以啦 3 简单熟悉phpst
  • 回形数(转载)

    转载及参考https blog csdn net sinat 37976731 article details 78614723 import java util Scanner author litianfu version 1 0 em
  • CCNP14-BGP基础

    文章目录 一 概念 二 特点 三 数据包 四 邻居关系 名词解释 五 BGP的防环机制 水平分割 六 BGP的工作过程 七 基本配置 八 BGP的三张表 1 简化邻居表 2 BGP的路由表 3 IP路由表 一 概念 BGP 边界网关协议 应
  • (4层)TCP 首部字段

    TCP 报文段的首部格式 TCP 虽然是面向字节流的 但 TCP 发送的数据单元却是报文段 一个 TCP 报文段分为首部和数据两部分 而 TCP 的全部功能都体现在它首部中各字段的作用 TCP 报文段首部的前 20 个字节是固定的 后面有
  • 【搭建博客】picGo+OSS防盗链配置(不同平台)

    汝之观览 吾之幸也 本文主要讲解在使用picGo OSS使用时会出现防盗链问题 配置OSS的防盗链 OSS支持对存储空间 Bucket 设置防盗链 即通过对访问来源设置白名单的机制 避免OSS资源被其他人盗用 可参考防盗链 配置目录 登录O
  • java strom实例_storm 入门教程+简单实例

    写在前面 本篇博客主要介绍 storm 基本概念和一个简单实例 storm版本1 0 2 storm基本概念 storm的集群架构 storm 是一个主从架构 一个主节点 n个从节点 主节点和从节点之间通过zk集群来进行交互 这张图是盗的
  • win10 安装 Cygwin

    http preshing com 20141108 how to install the latest gcc on windows How to Install the Latest GCC on Windows Several mod
  • c++之文件操作

    文件操作 1 头文件fstream 2 文件类型有两种 文本文件 二进制文件 3 操作文件的三大类 ofstream 写操作 ifstream 读操作 fstream 读写操作 写文件 1 包含头文件 include
  • OpenSSL_add_all_digests 函数不是 thread-safe 的

    项目中 多个线程同时执行 OpenSSL add all digests 函数 crash了 backtrace 如下 0 0x00007f5e93f5d536 in lh insert from usr lib64 libcrypto s
  • OpenStack官方认证(COA)正式回归!

    Certified OpenStack Administrator 简称 COA 是OpenStack基金会在2016年推出的唯一一个OpenStack官方管理员技术认证 对OpenStack的日常使用和管理 应该学习和掌握哪些技术 提出了
  • tp5,php将数组转化为字符串

    al array为数组 al array new implode al array implode将把数组的元素用逗号分割 al array new为以逗号为分隔符的字符串 补充 字符串转数组 explode str 下面有个问题 带键值的
  • ES6 JS 关于字符串和数组之间的转换

    ES6 JS 关于字符串和数组之间的转换 ArrayBuffer转16进度字符串示例 function ab2hex buffer var hexArr Array prototype map call new Uint8Array buf