.NET 编码的基础知识

54291d022779ce24f8287efe87b2f926.png

4abe4bbbf47db2010a1a3742c41d6ac6.png

点击上方蓝字关注我们

.NET 编码的一些基本概念和分析

简单的类型概念

  • Hex (16进制)

  • byte 字节 范围是:0~255,二进制下的范围就是00000000~11111111,相当于1字节。

  • byte[] 字节数组

  • bit 比特,只有2种状态:0,1

1 字节 等于 8 比特 即1byte=8bit

在c#中。Byte即byte,是一个struct结构体,

b1等于b2.

byte b = 1;
byte b1 = 0xf;//以0x开头 即16进制的写法
byte b2 = 15;
Assert.Equal(b1, b2);

错误的语法

byte b3 = b1 + b2;

正确的语法

byte b3 = (byte)(b1 + b2);
//或
int b4 = b1 + b2;

因为byte的相互运算太容易发生溢出,+ 加的重载 是int类型相加,所以结果是int类型

Encoding.UTF8.GetBytes

UTF8是统一的编码方式,它是一种变长的编码方式.它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度

byte[] plaintext = Encoding.UTF8.GetBytes("0123456789");

能得到什么样的数据,48,49,50,51,52,53,54,55,56,57。为什么?

搜ASCII码,我们就知道 0的ASCII码是 48

如果是字母呢。

byte[] plaintext = Encoding.UTF8.GetBytes("ABCDabcd");

能得到什么样的数据,65,66,67,68,97,98,99,100。为什么?还是因为ASCII码。UTF8当然是兼容ASCII码。

因为一个ASCII码,1个字节就能表示256个状态,所以英文字母,阿拉伯数字,标点符号都不在话下,那如果是中文呢。这里我们就拿UTF8编码来分析。

byte[]   plaintext = Encoding.UTF8.GetBytes("中国");

如下内容,长度为6,228,184,173 都是十进制。如果转成16进制呢。e4,b8,ad,如果分不清十六进制,建议学一下,计算机系统基础。当然,说明一下,a代表10e即代表14.即14*16+4=228.表示时不区分大小写,即用大写A,和小写a都能表示10

十进制十六进制
0228e4
1184b8
2173ad
3229e5
41559b
5189bd

我们从网上搜下,可以发现 中国 的UTF-8编码: E4B8AD E59BBD.说明通过Encoding.UTF8.GetBytes的结果肯定是对的。中文是用3或4个 Bytes存储的。

1.byte[] 转换hex(16进制字符串)

  1. Encoding.UTF8.GetBytes能得到数据的十进制的字节数组。

  2. BitConverter.ToString支持将十进制的数据转换成16进制,中间以-分隔,所以需要将中间的- Replace

public string ByteToHex(string str)
{byte[] bytes = Encoding.UTF8.GetBytes(str);string hex = BitConverter.ToString(bytes, 0).Replace("-", string.Empty);return hex;
}

hex得到 的数据就是 E4B8ADE59BBD

string hex= ByteToHex("中国");

2.byte[] 转换hex:StringBuilder方式

如下内容为什么能将数据转成16进制.

  1. Encoding.UTF8.GetBytes能得到数据的十进制的字节数组。

  2. 利用c#中的 复合格式化特性 {0:X2}自动转换成16进制。同样内容支持Console.WriteLine等

public string ByteToHex2(string str)
{byte[] bytes = Encoding.UTF8.GetBytes(str);StringBuilder ret = new StringBuilder();foreach (byte b in bytes){//{0:x2} 小写ret.AppendFormat("{0:X2}", b);}return ret.ToString();
}

hex(16进制字符串)转换 byte[]

  1. 一个循环将16进制转换成10进制。

public byte[] HexToByte(string hex)
{byte[] inputByteArray = new byte[hex.Length / 2];for (var x = 0; x < inputByteArray.Length; x++){var i = Convert.ToInt32(hex.Substring(x * 2, 2), 16);inputByteArray[x] = (byte)i;}return inputByteArray;
}

调用如下内容,bytes[]中的长度为6,数据是228,184,173、229,155,189。即上文中的中国的十进制byte数组

string hexChinese = "E4B8ADE59BBD";//中国的UTF8编码。十六进制。
byte[] bytes = HexToByte(hexChinese);
string text = Encoding.UTF8.GetString(bytes);// `中国`

作者: 、天上有木月OvO

出处:https://cnblogs.com/igeekfan

联系:luoyunchong@foxmail.com

b33adb5821469a886ec252bc93006b6b.png

点个在看你最好看

16f3c7e1687e74e81aaf93a95ff60fd3.png

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

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

相关文章

什么是MVC?MVC框架的优势和特点

目录 一、什么是MVC 二、MVC模式的组成部分和工作原理 1、模型&#xff08;Model&#xff09; 2、视图&#xff08;View&#xff09; 3、控制器&#xff08;Controller&#xff09; 三、MVC模式的工作过程如下&#xff1a; 用户发送请求&#xff0c;请求由控制器处理。 …

docker没有下载完全_会用Docker的人都别装了,这多简单呐

学术又官方的说法Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。没用过的人能看懂这段话&#xf…

WPF MVVM实例三

在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识&#xff1a;WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的&#xff0c;WPF提供了数据绑定机制&#xff0c;当数据发生变化时&#xff0c;WPF会自动发出通知去更新UI。我们使用模式…

stringcstdlibctimecstdargctimectypecmathclimits

转载地址&#xff1a;http://blog.csdn.net/kz_ang/article/details/7767335 <string>头文件 string构造函数 string s  生成一个空字符串s string s(str)  拷贝构造函数,生成str对象的复制品 string s(str,stridx)  将字符串str对象内"始于位置stridx"…

C3P0 释放连接 的问题

2019独角兽企业重金招聘Python工程师标准>>> 记录一下使用C3P0 时犯的低级错误&#xff0c;没有关闭connection 达到连接池最大限制后造成程序假死的现象&#xff0c;以后得仔细再仔细了&#xff01; 转载于:https://my.oschina.net/fusxian/blog/146700

python随机抽取人名_python的random

python的random函数更多的random用法可参阅&#xff1a;random --- 生成伪随机数 - Python 3.7.4 文档​docs.python.org以下使用了&#xff1a;洗牌&#xff1a;random.shuffle随机抽取元素&#xff0c;且元素不重复&#xff1a;random.sample随机抽取元素&#xff0c;且元素可…

Windows 11/10 正式版全新 ISO 镜像下载

微软现已发布 Windows 11/10 正式版&#xff08;版本 21H2&#xff09;全新 ISO 镜像。Windows 11 版本 21H2 全新镜像集成了 2021 年 10 月更新、11 月更新和 12 月更新。Windows 10 版本 21H2 全新镜像集成了 2021 年 11 月更新和 12 月更新。版本区别Windows 11/10 消费者版…

java web filter 之一 基础实现

本文主要对filter的基本使用进行了讲解&#xff0c;其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 &#xff0c;能实现对java web程序 客户端和服务器端消息的过滤&#xff0c;也就是在服务器段接受reques…

eclipse索引4超出范围_Python内置的4个重要基本数据结构:列表、元组、字典和集合

本章内容提要&#xff1a;列表及操作元组及操作字典及操作集合简介第2章介绍了数字(整数、浮点数)、逻辑值和字符串等Python内置的基本数据类型。在实际的操作中&#xff0c;仅仅依赖它们很难高效地完成复杂的数据处理任务。基于对基本数据类型的构建&#xff0c;Python拓展出列…

.NET 6 中 System.Text.Json 的新特性

1支持忽略循环引用在 .NET 6 之前&#xff0c;如果 System.Text.Json 检测到循环引用&#xff0c;就会抛出 JsonException 异常。在 .NET 6 中&#xff0c;你可以忽略它们。Category dotnet new() {Name ".NET 6", }; Category systemTextJson new() {Name "…

Java基础知识回顾--线程

基本概念 线程是一个程序内部的顺序控制流 Java的线程是通过java.lang.Thread类来实现的。main函数是一个主线程&#xff0c;用户可以通过创建Thread的实例来创建新的线程。每一个线程都必须实现run方法。通过Thread类的start方法来启动一个线程。 两种方式实现&#xff0c;一…

四、物理优化(1)范式化

一、范式化的概念范式化&#xff08;Normalization&#xff09;的目标是消除数据冗余&#xff0c;减小物理存储空间。常用的范式有以下3种&#xff1a;1. 第一范式&#xff08;1NF&#xff09;在任何一个关系数据库中&#xff0c;1NF是对关系模式的基本要求&#xff0c;不满足1…

​如何在图书馆收获一段爱情?​

1 你为什么不喜欢拍照片&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 当登记处挂起横幅▼3 这几天老是犯的错误▼4 在图书馆收获的爱情&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 当老师用键盘讲课&#xff08;素材来源网络&#xff0c;侵删&a…

MongoDB服务无法启动,原因居然是...

前言某台CentOS服务器上的MongoDB服务突然停止运行&#xff0c;于是登上去排查原因&#xff0c;接下来就是苦逼的爬坑之旅。爬坑记录1、重启服务使用systemctl命令重启服务&#xff1a;systemctl restart mongod.service查看系统日志&#xff1a;journalctl -ex只是提示启动失败…

python绘制饼图双层_有趣!如何用Python-matplotlib绘制双层饼图及环形图?

&#xff08;1&#xff09; 饼图&#xff08;pie&#xff09;&#xff0c;即在一个圆圈内分成几块&#xff0c;显示不同数据系列的占比大小&#xff0c;这也是我们在日常数据的图形展示中最常用的图形之一。 在python中常用matplotlib的pie来绘制&#xff0c;基本命令如下所示&…

C# 获取Excel中的合并单元格

C# 获取Excel中的合并单元格 我们在制作表格时&#xff0c;有时经常需要合并及取消合并一些单元格。在取消合并单元格时需要逐个查找及取消&#xff0c;比较麻烦。这里分享一个简单的方法来识别Excel中的合并单元格&#xff0c;识别这些合并单元格之后对这些单元格进行取消合并…

SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

一、前言 在MSDN上看到一篇关于SQL Server 表分区的文档&#xff1a;已分区索引的特殊指导原则&#xff0c;如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思。这里我就里面的一些概念进行讲解&#xff0c;方便大家的交流。 SQL Server 解读【已分区索引的特殊指…