C 中字串與位元組陣列互換的幾種編碼問題

2021-06-09 12:57:20 字數 1713 閱讀 8001

經驗總結--字串與編碼: 

首先應該把位元組陣列看成是string的載體。

dot net使用的字串string是unicode編碼的;它也是以unicode編碼的形式顯示字串。

以下是用自己語言對幾個常用函式的說明:

(自己總結的,反正看不明msdn)

bytes=system.text.encoding.unicode.getbytes(str)

作用:把str的載體作unicode-> unicode的編碼轉換--也就是沒有對載體作任何的轉換。因些使用此函式可以得代表該string載體的位元組陣列。

str=system.text.encoding.unicode.getstring(bytes)

作用:對位元組陣列作unicode-> unicode的編碼轉換--即沒有轉換,把經過轉換後的位元組陣列作為str的載體。

bytes=system.text.encoding.utf8.getbytes(str)

作用:把str的載體作utf8-> unicode的編碼轉換。返回的是經過轉換後的字元陣列

str=system.text.encoding.utf8.getstring(bytes)

作用:對位元組陣列作gb2312-> unicode的編碼轉換,把經過轉換後的位元組陣列作為str的載體。

bytes=system.text.encoding.getencoding( "gb2312 ").getbytes(str)

作用:把str的載體作gb2312-> unicode的編碼轉換。返回的是經過轉換後的字元陣列

str=system.text.encoding.getencoding( "gb2312 ").getstring(bytes)

作用:對位元組陣列作gb2312-> unicode的編碼轉換,把經過轉換後的位元組陣列作為str的載體。

如此類推

bytes=system.text.encoding.getencoding( "*** ").getbytes(str)

作用:把str的載體作***-> unicode的編碼轉換。返回的是經過轉換後的字元陣列

str=system.text.encoding.getencoding( "*** ").getstring(bytes)

作用:對位元組陣列作***-> unicode的編碼轉換,把經過轉換後的位元組陣列作為str的載體。

下面是我將這些做對比的乙個例子

從上面結果我們可以看出無論是英文或中文字元,unicode編碼都是用兩個位元組來儲存乙個字元

utf8編碼則是乙個位元組儲存乙個英文本元,三個位元組來儲存乙個中文字元

ascii編碼則不能用於中文編碼

例子的完整**如下:

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.windows.forms;

namespace 字串跟位元組陣列的互相轉換

private void button1_click(object sender, eventargs e)

}}

C 字串與位元組陣列互轉

定義string變數為str,記憶體流變數為ms,位元陣列為bt 1.字串轉位元陣列 1 byte bt system.text.encoding.default.getbytes 字串 2 byte bt convert.frombase64string 字串 2.字串轉流 1 memorystr...

C 字串到位元組陣列,位元組陣列轉整型

int num 12345 string num1 convert.tostring 12345,16 byte bytes bitconverter.getbytes num 將int32轉換為位元組陣列 num bitconverter.toint32 bytes,0 將位元組陣列內容再轉成in...

位元組陣列和字元之間互換

定義string變數為str,記憶體流變數為ms,位元陣列為bt 1.字串轉位元陣列 1 byte bt system.text.encoding.default.getbytes 字串 2 byte bt convert.frombase64string 字串 2.字串轉流 1 memorystr...