.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
| 0 | 228 | e4 |
| 1 | 184 | b8 |
| 2 | 173 | ad |
| 3 | 229 | e5 |
| 4 | 155 | 9b |
| 5 | 189 | bd |
我們從網上搜下,可以發現 中國 的UTF-8編碼:?E4B8AD E59BBD.說明通過Encoding.UTF8.GetBytes的結果肯定是對的。中文是用3或4個 Bytes存儲的。
1.byte[] 轉換hex(16進制字符串)
Encoding.UTF8.GetBytes能得到數據的十進制的字節數組。
BitConverter.ToString支持將十進制的數據轉換成16進制,中間以-分隔,所以需要將中間的-?Replace掉
hex得到 的數據就是?E4B8ADE59BBD
string hex= ByteToHex("中國");2.byte[] 轉換hex:StringBuilder方式
如下內容為什么能將數據轉成16進制.
Encoding.UTF8.GetBytes能得到數據的十進制的字節數組。
利用c#中的?復合格式化特性?{0:X2}自動轉換成16進制。同樣內容支持Console.WriteLine等
hex(16進制字符串)轉換 byte[]
一個循環將16進制轉換成10進制。
調用如下內容,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 编码的基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巅峰对决!Spring Boot VS
- 下一篇: WPF MVVM实例三