string和byte[]之間的轉換 (C#)
string型別轉成byte[]:
string str="ddddddd";
byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
反過來也是一樣,把byte[]轉成string:
byte[ ] byteArray ;
string strTest = System.Text.Encoding.Default.GetString( byteArray );
其實,在System.Text.Encoding class中,還有很多其它有用的方法,像GetChars,從一個byte[]轉成一個char[],等等,可以參考MSDN
http://msdn.microsoft.com/en-us/library/86hf4sb8.aspx。
另外,還有其它編碼方式的,如System.Text.UTF8Encoding class、System.Text.UnicodeEncoding class等,根據不同需要可選不同的class。其次BitConverter類就可以把byte[]轉化為其他型別
類似參考http://blog.163.com/zhangbq168/blog/static/23735305200801510439112/
上面的是標準的方法,肯定正確,但是不夠快。可以採用unsafe的方法提高效率(c#中實現指標只需要寫入unsafe,編譯選項把“允許不安全程式碼”開啟即可)。具體做法如下:
http://msdn.microsoft.com/zh-cn/library/f58wzh21(VS.80).aspx 參考
1.string型別轉成byte[]:
fixed (char* str = var) //var is string
{
fixed (byte* ptr = data) //data is byte[]
{
byte* bstr = (byte*)str; //---------------------1
for (int i = 0; i < var.Length * 2; i++)
{
ptr[i++] = bstr[i];
}
}
}
2. byte[]型別轉成string:
char[] tvar = new char[length / 2];
fixed (char* str = tvar)
{
fixed (byte* ptr = data)
{
byte* pstr = (byte*)str; //-----------------------2
for (int i = 0; i < data.Length; i++)
{
pstr[i] = ptr[i];
}
}
}
string var = new string(tvar);
注意:a. 在string中,每個字元佔兩個位元組,所以轉換成byte陣列時,長度要注意乘以2,反之除以2
b. 在1,2標記中,有一個強制轉換成byte位元組,這也正是為了方便下面的for語句拷貝,否則一個c#中一個char也是兩個位元組。
其他參考http://www.cnblogs.com/chinasf/archive/2005/05/28/163932.html
http://www.cnblogs.com/Mainz/archive/2008/04/09/String_Byte_Array_Convert_CSharp.html
相關文章
- Golang 陣列和字串之間的相互轉換[]byte/stringGolang陣列字串
- C#位元組陣列byte[]和字串string如何互相轉換C#陣列字串
- golang []byte和string的高效能轉換Golang
- String和Date、Timestamp之間的轉換
- Map和String型別之間的轉換型別
- Java中String和byte型別互相轉換Java型別
- GO語言中string和[]byte的區別及轉換Go
- Solidity String轉byte32 byte轉StringSolid
- Json,String,Map之間的轉換JSON
- delphi:string,PChar,Array of Char 之間的轉換
- 清華尹成帶你實戰GO案例(15)Go String與Byte切片之間的轉換Go
- C#:檔案、byte[]、Stream相互轉換C#
- c++中幾種常見的型別轉換。int與string的轉換,float與string的轉換以及string和long型別之間的相互轉換。to_string函式的實現和應用。C++型別函式
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- android中String與InputStream之間的相互轉換方式Android
- c++中string類物件和字元陣列之間的相互轉換C++物件字元陣列
- String和byte互轉,Base64正逆向
- 角度和弧度之間的轉換
- Java String和Date的轉換Java
- Java 中 CLOB 和字串之間的轉換Java字串
- 型別轉換(int 和 String)型別
- float與byte[]互相轉換
- 尤拉角和旋轉矩陣之間的轉換矩陣
- java基本型別和物件之間的轉換Java型別物件
- String.valueOf和強制型別轉換(String)的區別型別
- C# 獲取時間戳並從10進位制時間戳轉換成16進位制byte陣列C#時間戳陣列
- (C#)時間戳、DateTime相互轉換C#時間戳
- Android 多國語言轉換 Excel 和 Excel 轉換為 stringAndroidExcel
- String和基本資料型別的相互轉換資料型別
- Java之時間轉換Java
- 客戶端和服務端(C#) 時間戳的生成和轉換客戶端服務端C#時間戳
- java 基礎型別與byte[]的轉換Java型別
- Java 中將 Short 轉換為 byte[]Java
- python str與byte轉換 encode decodePython
- pcl::PointCloud和pcl::PontCloud::Ptr之間的關係和轉換方式Cloud
- C# bytes[]和sting互相轉換C#
- python str與bytes之間的轉換Python
- Python 實現Excel和TXT文字格式之間的相互轉換PythonExcel
- 一文了解進位制之間的原理和轉換