用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别

news2024/11/22 22:52:08

之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号。在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取程序显示的顺序不一样。于是着手对SysInfo的相关代码进行修改,由于读取到的硬盘序列号原始数据是一个16进制字符串,比如“20202020202020202020202039574d41374d5659”,我们首先要把这个16进制字符串转换成对应的ASCII,才好进一步做对比分析。

在这方面,直接用JavaScript应该是最方便的了。因为JavaScript提供了两个非常有用的函数:parseInt()和String.fromCharCode()。

一、parseInt()
首先说说parseInt()。

(一)功能:解析字符串并返回整数。
(二)语法:

parseInt(string, radix)

(三)参数说明:

参数描述
string必需。要解析的字符串。允许前导和尾随空格。
radix

可选。代表要使用的数字系统的数字(从 2 到 36)。

如果 radix 参数被省略,JavaScript 假定如下:

如果字符串以 "0x" 开头,则基数为 16(十六进制);
如果字符串以 "0" 开头,则基数为 8(八进制)(注:此特性已弃用);
如果字符串以任何其他值开头,则基数为 10(十进制)。


注意:只返回字符串中的第一个数字!

(四)返回值:

类型描述
number

返回一个整数。

如果第一个字符不能转换为数字,则返回 NaN。

二、String.fromCharCode()

(一)功能:可接受一个指定的 Unicode 值,然后返回一个字符串。

(二)语法:

String.fromCharCode(numX,numX,...,numX)

(三)参数说明:

参数描述
numX必需。一个或多个 Unicode 值,即要创建的字符串中的字符的 Unicode 编码。

(四)返回值:

类型描述
String返回代表 Unicode 编码的字符。

为了方便使用,我用editplus设计了一web页面,在一个form中包括了四个部分:

一是输入待转换字符串的文本框;

二是选择待转换字符串的进制基数的radio,有2、8、10、16四个常用的选项,其中默认选定16进制;

三是输出转换后的ASCII的文本框;

四是实现转换功能的按钮。

代码如下:

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>String 2 ASCII</title>
 </head>
<body>
<form id="frmScale" style="border:3px double black; padding:10px; width:600px;">
<P style="text-align:center;font-size:18pt; color:purple;">String 2 ASCII</P>
<p>待转换代码 :<input type="text" name="txtHex" value="20202020202020202020202039574d41374d5659"  id="txtHex" size="50"></p>
<p>代码进制基数:<input type="radio" name="scale" value="2">2进制&nbsp;<input type="radio" name="scale" value="8">8进制&nbsp;<input type="radio" name="scale" value="10">10进制&nbsp;<input type="radio" name="scale" value="16" checked="checked">16进制</p>
<p>ASCII&nbsp;   :<input type="text" name="txtASCII" id="txtASCII" size="50"></p>
 <p style="margin-left:90%;"><input type="button" value="转换" onclick="Hex2ASCII()"></p>
</form>
 </body>
</html>

配套的JavaScrpit转换代码如下:

<script>

 function Hex2ASCII()
 {
	var tHex = document.getElementById("txtHex").value;
	
	var iHexlen = tHex.length;
	if (0==iHexlen)
	{
		alert("请先输入代码!");
	}
	else
	{
		var iScale =  document.getElementById("frmScale").scale.value;
		if (null==iScale)
		{
			alert("请先选择待转换字符串的进制基数!");
		}
		else
		{
			//alert(iScale);
			var r = "";
			for (i=0; i <=iHexlen; i=i+2)
			{
				//alert(parseInt(tHex.substring(i,i+2),16) + "<BR>" + String.fromCharCode(parseInt(tHex.substring(i,i+2),16)));
				r += String.fromCharCode(parseInt(tHex.substring(i,i+2),iScale));
				//alert(r);
			}
			document.getElementById("txtASCII").value = r;
		}
	}
}
</script>

这段JavaScript代码在Edge浏览器中运行正常,但直接在EditPlus中运行时,即使在html代码中已经默认选定16进制,但

var iScale =  document.getElementById("frmScale").scale.value;

返回值仍为null:

为了保证通用性,增加了一个GetRadioValue()函数,完整代码如下:

<script>
function GetRadioValue(RadioName)
{
    var rb, v = null;   
    rb = document.getElementsByName(RadioName);
    if (null != rb)
	{
        var i;
        for(i=0; i<rb.length; i++)
		{
            if(rb[i].checked)
			{
                v = rb[i].value;           
            }
        }
    }
    return v;
} 

function Hex2ASCII()
{
	var tHex = document.getElementById("txtHex").value;
	
	var iHexlen = tHex.length;
	if (0==iHexlen)
	{
		alert("请先输入代码!");
	}
	else
	{
		//var iScale =  document.getElementById("frmScale").scale.value;//在Edge浏览器中此句可用,但在editplus中无效
		var iScale = GetRadioValue("scale");
		if (null==iScale)
		{
			alert("请先选择待转换字符串的进制基数!");
		}
		else
		{
			alert(iScale);
			r = "";
			for (i=0; i <=iHexlen; i=i+2)
			{
				alert(parseInt(tHex.substring(i,i+2),16) + "<BR>" + String.fromCharCode(parseInt(tHex.substring(i,i+2),16)));
				r += String.fromCharCode(parseInt(tHex.substring(i,i+2),iScale));
				//alert(r);
			}
			document.getElementById("txtASCII").value = r;
		}
	}
}
</script> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络爬虫爬取数据并制作词云全过程【内附可执行代码注释完整】

文章目录前言网络爬取数据部分小知识点利用正则表达式在字符串中提取到url&#xff08;https以及http&#xff09;仅仅只保存字符串中的中文字符爬取数据生成词云jieba分词生成词云生成词云最终版代码总结前言 快期末了&#xff0c;有个数据挖掘的大作业需要用到python的相关知…

Json字符串转成对象

Json字符串转成对象 Hello吖&#x1f60a;&#xff0c;我是孤音&#xff08;一个你理解不了的程序猿&#xff09;&#xff0c;今天来分享一个小技巧&#xff0c;能够大大滴提高效率额 问题&#x1f635; 接收到一串JSON格式的字符串&#xff0c;需要获取其中某些字段的值 思路…

一天梳理完React所有面试考察知识点

性能优化 性能优化&#xff0c;永远是面试的重点&#xff0c;性能优化对于 React 更加重要 在页面中使用了setTimout()、addEventListener()等&#xff0c;要及时在componentWillUnmount()中销毁使用异步组件使用 React-loadable 动态加载组件shouldComponentUpdate(简称SCU …

更高效、更精确的预测性维护方案是如何实现的?

一、预测性维护的必要性 设备维护一般有三种模式&#xff1a;事后维护、预防性维护和预测性维护。事后维护通常是在设备产生故障后采取措施进行维护&#xff0c;是一种成本较大的维护方式。预防性维护属于事先维护&#xff0c;是一种基于时间、性能等条件&#xff0c;对设备进…

A_A05_003 STC-ISP串口调试助手使用

目录 一、软件获取 二、软件基本功能介绍 1、接收缓冲区 2、串口通信参数配置区串口打开关闭其他设置区域 3、发送缓冲区 4、多字符发送区 三、注意事项 一、软件获取 网盘链接 直戳跳转 二、软件基本功能介绍 1、接收缓冲区 注&#xff1a;先选中串口助手切换到上图界…

OneNav Extend网址导航书签系统源码魔改版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 OneNav Extend 是一款功能强大的书签&#xff08;导航&#xff09;管理程序&#xff0c;使用PHP SQLite 3开发&#xff0c;界面简洁&#xff0c;安装简单&#xff0c;使用方便。 OneNa…

通达信下单接口如何执行量化策略?

在量化市场上&#xff0c;有很多交易系统就是通过执行量化策略来进行盈利&#xff0c;比如像通达信下单接口系统&#xff0c;其中就包括开仓、买入、止盈、止损方法与策略执行主函数等&#xff0c;那么执行这些策略呢&#xff1f; 想要了解清楚这个问题也很简单&#xff0c;通…

ssm+Vue计算机毕业设计校园疫情信息管理系统(程序+LW文档)

ssmVue计算机毕业设计校园疫情信息管理系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

linux下gcc编程12-window下clion编译调试redis7.0

redis介绍 Redis 通常被称为数据结构服务器。这意味着 Redis 通过一组命令提供对可变数据结构的访问&#xff0c;这些命令使用具有 TCP 套接字和简单协议的服务器-客户机模型发送。因此&#xff0c;不同的进程可以以共享的方式查询和修改相同的数据结构。 在 Redis 中实现的数…

WebDAV之葫芦儿·派盘 + Enpass

Enpass 支持WebDAV方式连接葫芦儿派盘。 想找一款加密软件把原来本地存储的明文密码,经过加密后存储到自己的电脑上。同时要具备云同步功能,有些安全级别没那么高的内容,可以同步到各端,以供快速查看、编辑。那您选择Enpass准没错了,还可以同步备份到个人私有派盘,跨平…

【vue】插槽,Provided/inject和vue3生命周期

&#xff08;1&#xff09;第一部分&#xff0c;关于插槽 插槽的作用是再子组件模板里面预留出位置&#xff0c;可以插入父组件的东西例如 <template> 下面是插槽展示的内容和&#xff1a;<slot/> </template>//父组件调用子组件布局的时候 <content>…

电竞蓝牙耳机什么牌子好?2022游戏蓝牙耳机推荐

随着玩游戏的人越来越多&#xff0c;随之而来的是越来越多的电竞蓝牙耳机的出现。在游戏中能够精准获取人物周围的声音变化&#xff0c;音效的同步汇入&#xff0c;这是喜欢戴蓝牙耳机玩游戏的用户所追求的听声辨位。那么&#xff0c;在众多的电竞蓝牙耳机当中&#xff0c;什么…

【复习笔记】计算机组成原理复习重点——篇五

计算机组成原理复习重点笔记 第&#xff15;章 输入输出系统 5.1 概述 外部设备&#xff1a;包括输入/输出设备及通过输入/输出接口才能访问的外存储设备。接口&#xff1a;外设与主机之间数据传输时完成速度匹配、格式转换等工作的逻辑部件。输入设备&#xff1a;键盘鼠标输出…

制造业ERP管理系统如何帮助企业解决委外加工管理难题?

当制造企业自身的生产能力不足或者缺乏某种技术的话&#xff0c;就需要把某个工艺甚至整个产品交给外面的制造厂商去进行生产&#xff0c;这就会触发委外加工作业。 委外加工是制造企业管理流程中&#xff0c;非常常见的一个环节&#xff0c;可以有效地减少因公司产能不足&…

qcustomplot单游标在多个坐标系中切换

1. 多坐标系—单个游标—游标在多个坐标系切换 在某些场景下&#xff0c;需要动态的添加多个坐标系&#xff0c;而游标只能在一个坐标系中显示&#xff0c;这时就需要将游标从默认的坐标系切换到指定坐标系&#xff0c;实现很简单&#xff0c;就不贴图了。代码如下&#xff1a…

docker中的c++ ROS节点中使用Matplotlib-cpp

背景 有时debug算法问题&#xff0c;想把算法&#xff0c;代码的中间量快速可视化出来&#xff0c;目前采用rviz或者qt_ros可以实现&#xff0c;但都不是很方便&#xff0c;代码开发量较大&#xff0c;常常会想要是能在ros c中也能像Matlab一样直接plot绘图就好了&#xff0c;…

英飞凌-AURIX-TC3XX 片上总线通信架构

目录1、英飞凌-AURIX-TC3XX 片上总线通信架构1.1、SRI-系统资源互连结构1.1.1、SRI简介1.1.2、SRI 的特征&#xff1a;1.1.3、SRI 结构相比于前一代产品主要的区别&#xff1a;1.1.4、SRI Crossbar 点对点连接机制1.1.5、SRI主机和SRI从机的连接情况1.2、系统外设总线1.3、BBB-…

Windows Qt连接达梦数据库

下载达梦数据库 首先可以在达梦数据库的官网下载达梦数据库&#xff1a;https://www.dameng.com/list_103.html 如果你的QT程序是64位的&#xff0c;那么就下载win64 的达梦数据库&#xff0c;相应的32位的QT程序要下载win32的达梦数据库。否则&#xff0c;程序在连接数据库时…

【图像分割】各向异性热扩散方程SAR图像分割【含Matlab源码 1879期】

⛄一、各向异性热扩散方程简介&#xff08;具体理论见参考文献&#xff09; 1 前言 图像分割是 图像解译的一个关键步骥。 图像分割属于图像解译的早期处理 &#xff0c; 目的是为更高水平的后续处理提供输人。 因此图像分割的好坏对后续 解译性能有较大的影响。 相对于光学图…

3、metasploit渗透测试初识

一、Metasploitable2靶机安装 参考(1条消息) Metasploitable-linux-2.0.0靶机下载配置教程_draper-crypto的博客-CSDN博客_metasploitable2-linux用户密码&#xff1a;msfadmin/msfadmin二、模块介绍 exploits&#xff08;渗透攻击/漏洞利用模块&#xff09;渗透攻击模块&#…