經驗總結--字串與編碼:
首先應該把位元組陣列看成是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...