日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

asp.net

.NET 编码的基础知识

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .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 编码的基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。