.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,一经查实,立即删除!

相关文章

Android之android.os.NetworkOnMainThreadException异常

今天用handler.post(Runnable);的时候出现了android.os.NetworkOnMainThreadException Runnable里面使用的访问网络请求&#xff0c;网络请求是不可以放在主线程里面的&#xff0c;所以出现了这个问题 因为我想执行 handler.post(runnable); Runnable runnable new Runnable(…

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

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

每日英语:The First Day On A Job Is Tough Work

Why is the first day on the job often the worst?New employees tend to be greeted with stacks of benefits paperwork, technology hassles and dull presentations about company culture. hassle&#xff1a;激战&#xff0c;争辩&#xff0c;麻烦事    But some c…

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

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

数据挖掘领域十大经典算法初探

一、C4.5 C4.5&#xff0c;是机器学习算法中的一个分类决策树算法&#xff0c; 它是决策树(决策树也就是做决策的节点间的组织方式像一棵树&#xff0c;其实是一个倒树)核心算法 ID3的改进算法&#xff0c;所以基本上了解了一半决策树构造方法就能构造它。 决策树构造方法其实就…

WPF MVVM实例三

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

linux命令chown和chmod什么区别

chown一般用来 更改属主。也就是文件所属用户。chmod功能要比chown要强大。可更改文件所有属性和权限。只有管理员账户才有权限用此命令。chown 是修改文件的所有者(owner),和所属组(group)chmod 是修改文件的执行属性(所属组,所属者以及其他人所有的权限,比如 读,写,执行)

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"…

背包模板

背包模板&#xff0c;自己总结&#xff0c;做题可直接套用。 0-1背包 有N件物品和一个容量为V的背包。第i件物品的费用是c[i]&#xff0c;价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 公式&#xff1a; f[i][v]max{f[i-1][v],f[i-1][v-c[i]]w[i]} 伪代码&#xff1a…

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;且元素可…

PL/SQL Developer使用技巧总结

1、PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时&#xff0c;为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码&#xff1b; 设置方法&#xff1a;PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History &#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 消费者版…

Android延时执行调用的几种方法

一、开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主线程执行任务 } }).start二、利用定时器 TimerTask task new TimerTask(){ public void run(){ //execute the task } }; Ti…

删除字符串中出现次数最少的字符

题目 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 字符串只包含小写…

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拓展出列…