欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

.NET 编码的基础知识

发布时间:2023/12/4 asp.net 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 .NET 编码的基础知识 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

点击上方蓝字关注我们

.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代表10,e即代表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进制字符串)

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

  • 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进制.

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

  • 利用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[]

  • 一个循环将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

    点个在看你最好看

    创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

    总结

    以上是生活随笔为你收集整理的.NET 编码的基础知识的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。