Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现
文章目录
- 0 背景
- 1 了解编码
- 1.1 ASCII码
- 1.2 机内码、国标码、区位码
- 1.2.1 区位码
- 1.2.2 国标码(GB 2312-80)
- 1.2.3 汉字机内码(GB 2312)
- 1.3 GBK和GB2312的区别
- 2 编码实现
- 2.1 QString数据转QByteArray类型
- 2.1.1 使用QTextCodec
- 2.1.2 使用toLocal8Bit(推荐)
- 2.2 QByteArray数据转QString类型
- 2.3 测试区位码gb2312
- 2.3.1 测试代码1(推荐)
- 2.3.2 测试代码2
- 参考
0 背景
因为需要对发送的汉字数据进行区位码编码,于是查询了如何进行编码。下文是查询笔记和实现总结。
1 了解编码
编码前,首先要了解四个码:ASCII码、机内码、国标码、区位码。
1.1 ASCII码
键盘上数字、字母和符号的单个为字符,组合起来成为字符串。
键盘上所能表示的字符有128个,刚好是27,在7位的最前面补一个0,变成8位(bit),即一个字节(Byte)。每个字符都对应一个8位的二进制编码。
上表为10进制表示的ASCII码表,例如字母A对应的10进制数为65,表示的16进制为41H,即二进制编码:0100,0001。
ASCII码中字符被分成三类:可印刷字符、控制字符、通信字符
1,可印刷字符:32~126都是可印刷字符。可以打印出来给人看的。
2,控制字符:127是控制字符,DEL就是键盘上的delete,用于删除。
3,通信字符:0~32,比如6,ACK,在两个电脑通信时,会一方接到另一方传来的数据时,就会回一个ACK包。
1.2 机内码、国标码、区位码
机内码、国标码、区位码的三者转换关系为:
读取数据编码时:
机内码—>国标码---->区位码
1,把数据按字符串读取,就可以得到机内码;
2,机内码减去8080H(将最高位变为0),就是国标码;
3,国标码再减去32(2020H),就是区位码;
接收数据解码时:
区位码---->国标码—>机内码
1,把区位码加上2020H(区分ASCII码中的通信字符),得到国标码(GB2312-80);
2,把国标码加上8080H(区分ASCII码中的全部字符),得到 汉字机内码(GB2312)。
1.2.1 区位码
因为ASCII码只能表示英文字母,想表示中文,就需要额外的编码。这里使用的就是区位码(区域位置码)。
区位码中,汉字被分成了94个区域,每个区域有94个位置。就像是坐标一样,区是横坐标,位是纵坐标。
如下面区位码表中,啊
的区位码为1601H,即16H是区,01H是位。
关于GB2312字符集的编集如下:
1,01~09区(682个):特殊符号、数字、英文字符、制表符等,包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母等在内的682个全角字符;
2,10~15区:空区,留待扩展;
3,16~55区(3755个):常用汉字(也称一级汉字),按拼音排序;
4,56~87区(3008个):非常用汉字(也称二级汉字),按部首/笔画排序;
5,88~94区:空区,留待扩展。
1.2.2 国标码(GB 2312-80)
在网络传输过程中:A要给B传输一个数据,如果A传去的数据是用GB2312-80编的,而B读取地方式是用ASCII方式的,GB 2312-80将区位码传过去,当B收到时会先读到区码,因为区码和位码的范围用十进制表示都是0~93,如果此时的区码的十进制是6,那么ASCII对应的6则是ACK,会发现ACK是回包的指示。那么就会出现问题。
为了解决这一问题,将区位码的区码和位码都+32,区码和位码的范围就变成了32-125,而ASCII的通信字符是0到32,就避开了与ASCII中通信字符与控制字符的相同的情况,提高了ASCII和区位码的兼容性。
而这种32~125的区位码就是:国标码(GB2312 -80)
但是国标码是用十六进制表示的,实际上是在区位码的区码和位码分别加上20H(十进制:32),也就是加上2020H,最后得到了GB 2312-80
1.2.3 汉字机内码(GB 2312)
国标码是为了防止与ASCII的控制字符和通信字符冲突,但是还是会和打印字符发送冲突,因此为了彻底让国标码和ASCII兼容。就再GB 2312-80(国标码)的基础上分别在加上8080H,也就是在区码和位码上再加上128(80H)。最后得到了:汉字机内码,GB 2312就是汉字机内码。
由于ASCII的范围是再0-127,而GB 2312在(128+32=160)160~253(93+160),因此GB2312与ASCII就不会发生冲突了,使得中国汉字与外国英文兼容了。
最后在计算机内部,使用的就是汉字机内码(GB 2312)。
1.3 GBK和GB2312的区别
收录不同:GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;GBK共收入21886个汉字和图形符号。
表示不同:GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有94个汉字/符号,分别对应第一字节和第二字节。GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。
2 编码实现
编码后,使用如下工具进行查询和比对:
1,汉字区位码查询网站;
2,在线转换查询网站;
3,在线查询软件;
2.1 QString数据转QByteArray类型
2.1.1 使用QTextCodec
该类的官方使用文档。
注意:QTextcodec在QT6中已经被弃用,取而代之的是QTextCodec(注意大小写)。
头文件:
#include <QTextCodec>
#include <qDebug>
#include <QByteArray>
QByteArray content = "啊阿埃挨";QByteArray resData = QTextCodec::codecForName("GB2312")->fromUnicode(content);qDebug()<<resData.toHex().toUpper();
输出:
B0A1B0A2B0A3B0A4
2.1.2 使用toLocal8Bit(推荐)
QString str("啊");QByteArray data = str.toLocal8Bit();//转为本地8bit编码格式,对于windows系统,本地编码格式为GBK,linux系统为UTF-8。qDebug()<<"resData:"<<data.toHex().toUpper();
输出:
B0A1
2.2 QByteArray数据转QString类型
QByteArray content = "啊阿埃挨";
QByteArray resData = QTextCodec::codecForName("GB2312")->fromUnicode(content);
QString strUnicode= QTextCodec::codecForName("GB2312")->toUnicode(resData.data());
qDebug()<<strUnicode;
2.3 测试区位码gb2312
2.3.1 测试代码1(推荐)
QString str("啊");QByteArray data = str.toLocal8Bit();//获取机内码 :转为本地8bit编码格式,对于windows系统,本地编码格式为GBK,linux系统为UTF-8。QByteArray resData;char first = data.data()[0] - 0xa0;char second = data.data()[1] - 0xa0;resData += first;resData += second;QString hexStringHigh = resData.mid(0,1).toHex();QString hexStringLow = resData.mid(1,1).toHex();bool ok;uint decimalHigh = hexStringHigh.toUInt(&ok, 16);uint decimalLow = hexStringLow.toUInt(&ok, 16);qDebug()<<"汉字机内码:"<<data.toHex().toUpper();qDebug()<<"16进制的区位码gb2312:"<<resData.toHex().toUpper();qDebug()<<"10进制的区位码gb2312:"<<decimalHigh<<decimalLow;
输出:
汉字机内码: "B0A1"
16进制的区位码gb2312: "1001"
10进制的区位码gb2312: 16 1
2.3.2 测试代码2
QString text_str("啊");const char *hanzi=qPrintable(text_str);QByteArray ba(hanzi);char *data = ba.data();char s[3];s[0]='0';s[1]='0';s[2]='0';sprintf(s, "%x", data[0]);QString qstr1 = QString::fromStdString(s);sprintf(s, "%x", data[1]);QString qstr2 = QString::fromStdString(s);QString s1=qstr1.right(2);QString s2=qstr2.right(2);bool ok;int quwei=(s1.toUpper()+s2.toUpper()).toInt(&ok,16)-0xA0A0;QString qstr3=QString::number(quwei,16);qDebug()<<"汉字内码高位:"<<s1;qDebug()<<"汉字内码低位:"<<s2;qDebug()<<"16进制区位码:"<<qstr3;
参考
srhqwe:编码格式说明
涛··:Qt之GB2312\GBK字符与QString转换
wkm956:Qt获取汉字区位码
丁老师的技术随笔:Qt 汉字内码及区位码 提取
相关文章:
Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现
文章目录 0 背景1 了解编码1.1 ASCII码1.2 机内码、国标码、区位码1.2.1 区位码1.2.2 国标码(GB 2312-80)1.2.3 汉字机内码(GB 2312) 1.3 GBK和GB2312的区别2 编码实现2.1 QString数据转QByteArray类型2.1.1 使用QTextCodec2.1.2 …...
IDEA 未启用lombok插件的Bug
项目中maven已引用了lombok依赖,之前运行没有问题的,但有时启动会提示: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…...
R语言学习笔记-1
1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…...
NFT的公链及开放联盟链信息整理
BSN链 名称内容类型开放联盟链网址https://www.bsnbase.com/节点信息登陆后可免费获取区块链浏览器可查看交易详情使用案例光明艺品、数藏中国、千寻数藏、集集文创、乾坤数藏 至信链 名称内容类型开放联盟链网址https://zxchain.qq.com/节点信息需要登录并充值后获取区块链…...
android notification
前言 在做应用时,时常需要在通知栏显示一条通知,那么具体流程是怎样的呢,怀着这样的探究目的,来进行一步步源码分析。 源码梳理 package com.android.server; ... public final class SystemServer implements Dumpable {...pr…...
C# 多态性
文章目录 前言一、多态性的定义二、C# 中的多态性实现方式1. 方法重写(Overriding)2. 方法重载(Overloading)3. 接口实现(Interface implementation) 三、多态性的优点1. 提高代码的可维护性2. 增强代码的可…...
类与对象以及ES6的继承
认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…...
每日一站技術架構解析之-cc手機桌布網
# 網站技術架構解析: ## 一、整體架構概述https://tw.ccwallpaper.com是一個提供手機壁紙、桌布免費下載的網站,其技術架構設計旨在實現高效的圖片資源管理與用戶訪問體驗優化。 ### (一)前端展示 1. **HTML/CSS/JavaScript基礎構…...
【橘子容器】如何构建一个docker镜像
你肯定打过docker镜像是吧,作为一个开发这很正常,那么你用的什么打包方式呢,这里我们来梳理几种常用的docker镜像构建方式。 ps:这里不是太讲原理,更多的是一种科普和操作。因为讲原理的东西网上已经够多了。 一、Dock…...
【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞
目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台,适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持,功能强大但需要更多的技术投入。Adobe…...
数据结构 ——二叉树转广义表
数据结构 ——二叉树转广义表 1、树转广义表 如下一棵树,转换为广义表 root(c(a()(b()()))(e(d()())(f()(j(h()())())))) (根(左子树)(右子树)) 代码实现 #include<stdio.h> #include<stdlib.h>//保存…...
Redis篇-6--原理篇5--单线程模型
1、概述 Redis 采用单线程模型来处理客户端请求,这意味着在任意时刻只有一个命令被执行。这种设计简化了 Redis 的实现,并确保了高并发环境下的数据一致性。尽管 Redis 是单线程的,但它通过高效的内存管理和网络 I/O 操作,仍然能…...
LSTM详解
1. LSTM设计 LSTM(长短期记忆网络)详解 长短期记忆网络(LSTM, Long Short-Term Memory) 是一种特殊的循环神经网络(RNN),特别适合处理和预测序列数据中的长时间依赖关系。LSTM 通过引入“门机制”(如输入门、遗忘门、输出门)来解决标准 RNN 在长时间序列任务中梯度消…...
Docker 安装 Seata2.0.0 (快速配置)
说明:已安装Docker、MySql等,案例使用Mysql数据库模式、Nacos配置信息 1、准备工作 1.1 拉取镜像 [rootTseng ~]# docker pull seataio/seata-server:2.0.0 2.0.0: Pulling from seataio/seata-server 001c52e26ad5: Already exists d9d4b9b6e964: P…...
文件断点续传(视频播放,大文件下载)
客户端每次请求取大文件部分数据。 浏览器播放mp4视频时,会首先传Range消息头,检测到206状态码,和Content-Range,Accept-Ranges 会自动请求余下数据。后端需要在文件任意偏移量取数据。 参考: springboot项目实现断…...
神经网络基础-初识神经网络
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经…...
爬虫获取的数据能否用于商业分析?
根据搜索结果,爬虫获取的数据能否用于商业分析,主要取决于以下几个因素: 数据的合法性与合规性: 爬虫技术本身并不违法,关键在于使用的方式和目的。爬虫技术的使用必须遵守相关法律法规,如《反不正当竞争法…...
【Java】3、并发编程 JUC(模块三:设计模式)
目录 Immutability模式Copy-on-Write模式线程本地存储模式Guarded Suspension模式(保护性暂停)Balking模式Thread-Per-Message模式Worker Thread模式两阶段终止模式生产者-消费者模式 Immutability模式 Copy-on-Write模式 线程本地存储模式 Guarded S…...
ASP.NET|日常开发中连接Sqlite数据库详解
ASP.NET|日常开发中连接Sqlite数据库详解 前言一、安装和引用相关库1.1 安装 SQLite 驱动1.2 引用命名空间 二、配置连接字符串2.1 连接字符串的基本格式 三、建立数据库连接3.1 创建连接对象并打开连接 四、执行数据库操作4.1 创建表(以简单的用户表为例…...
渗透测试学习笔记(四)web漏洞
一.web相关漏洞 漏洞分类漏洞类型Web 源码类漏洞SQL 注入,文件上传,XSS,代码执行,变量覆盖,逻辑漏洞,反序列化Web 中间件漏洞未授权访问,变量覆盖数据库漏洞弱口令,权限提升系统层漏…...
Facebook如何避免因IP变动而封号?实用指南
随着Facebook在个人社交与商业推广中的广泛应用,越来越多的用户面临因“IP变动”而被封号的问题。尤其是跨境电商、广告运营者和多账号管理用户,这种情况可能严重影响正常使用和业务发展。那么,如何避免因IP变动导致的封号问题?本…...
【Vulkan入门】10-CreatePipeline
目录 先叨叨Git信息关键代码TestPipeline::Initialize() 编译运行 先叨叨 到上篇为止已经创建了FrameBuffer和RenderPass。建立Pipeline的先决条件已经具备。本篇就来创建Pipeline。 Git信息 repository: https://gitee.com/J8_series/easy-car-uitag: 10-CreatePipelineurl…...
视频安防监控平台:Liveweb视频监控管理云平台方案
LiveWeb是深圳市好游科技有限公司开发的一套综合视频汇聚管理平台,可提供多协议(RTSP/RTMP/GB28181/海康Ehome/大华,海康SDK等)的视频设备接入,支持GB/T28181上下级联,RTSP\RTMP转GB/T28181,云台…...
企业级日志分析系统ELK之ELK概述
ELK 概述 ELK 介绍 什么是 ELK 早期IT架构中的系统和应用的日志分散在不同的主机和文件,如果应用出现问题,开发和运维人员想排 查原因,就要先找到相应的主机上的日志文件再进行查找和分析,所以非常不方便,而且还涉及…...
scala隐式转换
概念: 在Scala编程语言中,隐式转换是一种强大的功能,它允许程序在需要时自动转换数据类型或增强对象功能。这种转换通常是通过定义一个标记为implicit的函数来实现的,这个函数能够将一种类型转换为另一种类型。隐式转换的使用可以…...
基于无线传感器网络的无线土壤湿度采集系统(附详细使用教程+完整代码+原理图+完整课设报告)
🎊项目专栏:【Zigbee课程设计系列文章】(附详细使用教程完整代码原理图完整课设报告) 前言 👑由于无线传感器网络(也即是Zigbee)作为🌐物联网工程的一门必修专业课,具有…...
367_C++_计算mouse移动过程中,视频框的右侧、底部边距,以及根据实时的右侧、底部边距计算—视频框的左上角位置
代码分析 1. restorePos 方法 restorePos 的作用是恢复 NavigationFrame 的位置,将其移动到父窗口或者指定矩形内的特定位置。 void NavigationFrame::restorePos() {// 获取目标矩形:优先使用 `m_pRect`,否则默认使用视频区域或父窗口区域RSRect videoRect(m_pVide...
Ubuntu下将Julia嵌入Jupyter内核
一.安装 Julia 如果 Julia 尚未安装: 打开终端,下载最新的 Julia 安装包: wget https://julialang-s3.julialang.org/bin/linux/x64/1.9/julia-1.9.3-linux-x86_64.tar.gz 解压并移动到 /opt: tar -xvzf julia-1.9.3-linux-x86_…...
babeltrace与CTF相关学习笔记-1
babeltrace与CTF相关学习笔记-1 写在前面代码下载代码代码编译相关的依赖bootstrapconfigure过程编译和安装注 编译完成后,初步的审视找到与ctf相关的工程tests./test-ctf-writer.sh先运行./test-ctf-writer.shctf-writer脚本 vscode跟踪ctf-writer.c后记࿱…...
国内Chrome浏览器下载安装教程,谷歌浏览器最新下载教程
今天主要讲解的是国内Chrome浏览器下载安装教程,谷歌浏览器最新下载教程,包括确认浏览器版本、ChromeDriver 驱动的下载,同理,这个教程同样适用于windows版本的,linux 版本的, mac 版本的。 众所周知&…...
使用秘钥登录服务器
在我们测试或生产环境中,为了服务器安全性,有时可能需要以 SSH 密钥的方式登录服务器,接下来,将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…...
vscode中PyQt5模块代码提示问题
在VSCode中使用PyQt5时遇到代码提示缺失的问题,尝试了更新jedi、使用Pylance插件以及修改python.autoComplete.extraPaths配置均未见效。 ## 配置qgis的vscode开发环境 在vscode编辑器中qgis的引入会报错,请按一下步骤解决: 1. 在vscode中&a…...
SpringBoot 整合 RabbitMQ 实现流量消峰
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将 RocketMQ 捐献给了 Apache,当然了今天的主角还…...
Jenkins与SonarQube持续集成搭建及坑位详解
Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…...
从YOLOv5到训练实战:易用性和扩展性的加强
文章目录 前言一、模型介绍二、YOLOv5网络结构1.Input(输入端):智能预处理与优化策略2.Backbone(骨干网络):高效特征提取3.NECK(颈部):特征增强与多尺度融合4.Prediction…...
聊聊Oracle自适应查询优化
成也AQO败也AQO 因为工作的原因,我们接触到的客户大部分是金融和运营商行业,这些客户有个最大的特点是追求稳定,对于使用数据库新特性持保守的态度,不会轻易尝试某些可能会导致生产系统不稳定的新特性。上线前通常都会将一些新特…...
MySQL其四,各种函数,以及模拟了炸裂函数创建用户等操作
目录 一、MySQL中的函数 1、IFNULL 2、IF 3、case (难点) 4、exists(难) --存在的意思 二、常见的函数 1、字符串函数 2、数学函数 3、日期函数 (使用频率不是很高) 4、其他函数 5、关于字符集的问题 6、mysql炸裂函数…...
浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号。有所收获。这里总结下个人经验。 开讲前,先吐槽一下新浪云服务器,一个程序里的 同一个函数 在PC测试可以正常运行,在它那里就会挂的现象。 老样子,我将在代…...
ssm-springmvc-学习笔记
简介 简单的来说,就是一个在表述层负责和前端数据进行交互的框架 帮我们简化了许多从前端获取数据的步骤 springmvc基本流程 用户在原本的没有框架的时候请求会直接调用到controller这个类,但是其步骤非常繁琐 所以我们就使用springmvc进行简化 当用…...
nVisual 登录页页面配置说明
一、概述 nVisual登录页面可根据具体客户需要通过public\config\access.js文件进行自定义配置。页面可以大致分为4个部分,头部、底部、可移动区域以及页面中间的信息填写区域。其中头部和底部又包含头部左侧、头部中间、头部右侧、底部左侧、底部中间、底部右侧六个…...
Qt6开发自签名证书的https代理服务器
目标:制作一个具备类似Fiddler、Burpsuit、Wireshark的https协议代理抓包功能,但是集成到自己的app内,这样无需修改系统代理设置,使用QWebengineview通过自建的代理服务器,即可实现https包的实时监测、注入等自定义功能…...
crapy 爬虫框架的使用
1.scrapy框架安装 安装前先安装python3和pycharm 社区版 执行命令安装scrapy, pip install scrapy 2.创建项目 执行命令: scrapy startproject test_spider 如图: 3.使用pycharm大开项目并设置pipenv虚拟机环境 虚拟环境是为了依赖隔…...
Edge SCDN 边缘安全加速有什么用?
Edge SCDN是最新推出的边缘安全加速服务,它是一种融合了安全防护和内容分发加速功能的网络服务技术,通过在网络边缘部署服务器节点,来优化内容的传输和用户的访问体验,同时保障网络安全。 抵御 DDoS 攻击: Edge SCDN …...
使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件
使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件 使用aarch64-unknown-linux-musl编译生成静态ARM64可执行文件1. 安装aarch64-unknown-linux-musl目标2. 安装交叉编译工具链安装musl-cross-make 3. 配置Rust编译器使用交叉编译工具链4. 编译你的Rust项目5. 运行或…...
u-boot移植、配置、编译学习笔记【刚开始就中止了】
教程视频地址 https://www.bilibili.com/video/BV1L24y187cK 【这个视频中途停更了…原因是实际中需要去改u-boot的情况比较少】 使用的u-boot的源码 视频中使用的是 u-boot-2017.03 学习到这里,暂停u-boot的移植、配置、编译学习,原因是经过与老师…...
torchaudio.load 段错误
使用 torchaudio.load 时出现崩溃,如图 解决: 安装 ffmpeg conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda,重装 pytorch,安装 PySoundFile、SoundFile、sox。...
自定义函数库
求两点距离 double dis(double x1, double y1, double x2, double y2){return sqrt(pow(x2-x1, 2)pow(y2-y1, 2)); }判断闰年 bool isLeapYear(int year){return year%40 && year%100!0 || year%4000; }判断素数 bool isPrime(int num){if(num<2) return false;f…...
Tomcat的下载和使用,配置控制台输出中文日志
目录 1. 简介2. 下载3. 使用3.1 文件夹展示3.1.1 控制台输出乱码 3.2 访问localhost:80803.3 访问静态资源 4. 总结 1. 简介 Tomcat,全称为Apache Tomcat,是一个开源的Web应用服务器和Servlet容器,由Apache软件基金会的Jakarta项目开发。它实…...
STM32应用开发——BH1750光照传感器详解
STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…...
java jar包加密 jar-protect
介绍 java 本身是开放性极强的语言,代码也容易被反编译,没有语言层面的一些常规保护机制,jar包很容易被反编译和破解。 受classfinal(已停止维护)设计启发,针对springboot日常项目开发,重新编写安全可靠的jar包加壳加密技术,用于保护软件版权。 使用说…...