C#字節(jié)數(shù)組(byte[])和字符串相互轉(zhuǎn)換方式
C#字節(jié)數(shù)組(byte[])和字符串相互轉(zhuǎn)換
通過C#中的system.text.encoding獲取字符串的編碼可以有ASCII,DEFAULT,utf-8以及其他一些方式
對(duì)于英文而言這幾種所獲取的編碼是沒有太大區(qū)別的,而中文則大有不同,其中DEFAULT所采取的是GB2312
可以通過一下方式進(jìn)行確認(rèn),程序運(yùn)行后會(huì)發(fā)現(xiàn)bufOfGB和buf是相同的
? ? ? ? ? ? ? ? string str = "hello,我的祖國"; ? ? ? ? ? ? ? ? byte[] bufOfGB = System.Text.Encoding.GetEncoding("gb2312").GetBytes(str); ? ? ? ? ? ? ? ? Array.ForEach(bufOfGB,m=>Console.WriteLine(m)); ? ? ? ? ? ? ? ? Console.WriteLine(System.Text.Encoding.Default); ? ? ? ? ? ? ? ? byte[] buf = System.Text.Encoding.Default.GetBytes(str); ? ? ? ? ? ? ? ? Array.ForEach(buf,m=>Console.WriteLine(m)); ? ? ? ? ? ? ? ? Console.WriteLine("-------------"); ? ? ? ? ? ? ? ? byte[] bufOfASCII = System.Text.Encoding.ASCII.GetBytes(str); ? ? ? ? ? ? ? ? Array.ForEach(bufOfASCII,m=>Console.WriteLine(m)); ? ? ? ? ? ? ? ? Console.WriteLine("-------------"); ? ? ? ? ? ? ? ? byte[] bufOfUTF = System.Text.Encoding.UTF8.GetBytes(str); ? ? ? ? ? ? ? ? Array.ForEach(bufOfUTF,m=>Console.WriteLine(m)); ? ? ? ? ? ? ? ? Console.WriteLine("-------------");
byte[] byteArray ={43,45,67,88,23,1f} string str = System.Text.Encoding.Default.GetString(byteArray);
C#字節(jié)數(shù)組向類型的轉(zhuǎn)化
字節(jié)數(shù)組與圖像
? ? ? #region BytesToBmp【函數(shù)】將字節(jié)數(shù)組轉(zhuǎn)化為圖像 ? ? ? ? /// <summary> ? ? ? ? /// 【函數(shù)】將字節(jié)數(shù)組轉(zhuǎn)化為圖像 ? ? ? ? /// </summary> ? ? ? ? /// <param name="buffer"></param> ? ? ? ? /// <returns></returns> ? ? ? ? public static Image BytesToBmp(byte[] buffer) ? ? ? ? { ? ? ? ? ? ? MemoryStream ms = new MemoryStream(buffer); ? ? ? ? ? ? ms.Position = 0; ? ? ? ? ? ? Image img = Image.FromStream(ms); ? ? ? ? ? ? ms.Close(); ? ? ? ? ? ? return img; ? ? ? ? } ? ? ? ? #endregion ? ? ? ? ? #region BmpToBytes【函數(shù)】將圖像轉(zhuǎn)化為字節(jié)數(shù)組 ? ? ? ? /// <summary> ? ? ? ? /// 【函數(shù)】將圖像轉(zhuǎn)化為字節(jié)數(shù)組 ? ? ? ? /// </summary> ? ? ? ? /// <param name="Bit"></param> ? ? ? ? /// <returns></returns> ? ? ? ? public static byte[] BmpToBytes(Bitmap Bit) ? ? ? ? { ? ? ? ? ? ? byte[] back = null; ? ? ? ? ? ? MemoryStream ms = new MemoryStream(); ? ? ? ? ? ? Bit.Save(ms, System.Drawing.Imaging.ImageFormat.Png); ? ? ? ? ? ? back = ms.GetBuffer(); ? ? ? ? ? ? return back; ? ? ? ? } ? ? ? ? #endregion
字節(jié)數(shù)組與字符串
? ? ? ? #region StringToBytes【函數(shù)】將字符串轉(zhuǎn)化為字節(jié)組 ? ? ? ? /// <summary> ? ? ? ? /// 【函數(shù)】將字符串轉(zhuǎn)化為字節(jié)組 ? ? ? ? /// </summary> ? ? ? ? /// <param name="str"></param> ? ? ? ? /// <returns></returns> ? ? ? ? public static byte[] StringToBytes(string str) ? ? ? ? { ? ? ? ? ? ? byte[] data = System.Text.Encoding.Default.GetBytes(str); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? ? #region BytesToString【函數(shù)】將字節(jié)數(shù)組轉(zhuǎn)化為字符串 ? ? ? ? /// <summary> ? ? ? ? /// 【函數(shù)】將字節(jié)數(shù)組轉(zhuǎn)化為字符串 ? ? ? ? /// </summary> ? ? ? ? /// <param name="data"></param> ? ? ? ? /// <returns></returns> ? ? ? ? public static string BytesToString(byte[] data) ? ? ? ? { ? ? ? ? ? ? string str = System.Text.Encoding.Default.GetString(data); ? ? ? ? ? ? return str; ? ? ? ? } ? ? ? ? #endregion
字節(jié)數(shù)組與整數(shù)
? ?#region BytesToInt【函數(shù)】byte數(shù)組轉(zhuǎn)int數(shù)組 ? ? ? ? ? /// <summary> ? ? ? ? ? /// 【函數(shù)】byte數(shù)組轉(zhuǎn)int數(shù)組 ? ? ? ? /// </summary> ? ? ? ? ? /// <param name="src">源byte數(shù)組</param> ? ? ? ? ? /// <param name="offset">起始位置</param> ? ? ? ? ? /// <returns></returns> ? ? ? ? ? public static int[] BytesToInt(byte[] src, int offset) ? ? ? ? { ? ? ? ? ? ? int[] values = new int[src.Length / 4]; ? ? ? ? ? ? for (int i = 0; i < src.Length / 4; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int value = (int)((src[offset] & 0xFF) ? ? ? ? ? ? ? ? ? ? ? ? | ((src[offset + 1] & 0xFF) << 8) ? ? ? ? ? ? ? ? ? ? ? ? | ((src[offset + 2] & 0xFF) << 16) ? ? ? ? ? ? ? ? ? ? ? ? | ((src[offset + 3] & 0xFF) << 24)); ? ? ? ? ? ? ? ? values[i] = value; ? ? ? ? ? ? ? ? offset += 4; ? ? ? ? ? ? } ? ? ? ? ? ? return values; ? ? ? ? } ? ? ? ? #endregion ? ? ? ? ? #region IntToBytes【函數(shù)】int數(shù)組轉(zhuǎn)byte數(shù)組? ? ? ? ? /// <summary> ? ? ? ? ? /// 【函數(shù)】int數(shù)組轉(zhuǎn)byte數(shù)組 ? ? ? ? ? /// </summary> ? ? ? ? ? /// <param name="src">源int數(shù)組</param>? ? ? ? ? /// <param name="offset">起始位置,一般為0</param> ? ? ? ? ? /// <returns>values</returns> ? ? ? ? ? public static byte[] IntToBytes(int[] src, int offset) ? ? ? ? { ? ? ? ? ? ? byte[] values = new byte[src.Length * 4]; ? ? ? ? ? ? for (int i = 0; i < src.Length; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? values[offset + 3] = (byte)((src[i] >> 24) & 0xFF); ? ? ? ? ? ? ? ? values[offset + 2] = (byte)((src[i] >> 16) & 0xFF); ? ? ? ? ? ? ? ? values[offset + 1] = (byte)((src[i] >> 8) & 0xFF); ? ? ? ? ? ? ? ? values[offset] = (byte)(src[i] & 0xFF); ? ? ? ? ? ? ? ? offset += 4; ? ? ? ? ? ? } ? ? ? ? ? ? return values; ? ? ? ? } ? ? ? ? #endregion
字節(jié)數(shù)組與Object
? ? ? ? #region ObjectToBytes【函數(shù)】將一個(gè)object對(duì)象序列化,返回一個(gè)byte[] ? ?? ? ? ? ? /// <summary>? ? ? ? ? /// 【函數(shù)】將一個(gè)object對(duì)象序列化,返回一個(gè)byte[] ? ? ? ?? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="obj">能序列化的對(duì)象</param> ? ? ? ?? ? ? ? ? /// <returns></returns>? ? ? ? ? public static byte[] ObjectToBytes(object obj) ? ? ? ? { ? ? ? ? ? ? using (MemoryStream ms = new MemoryStream()) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? IFormatter formatter = new BinaryFormatter(); ? ? ? ? ? ? ? ? formatter.Serialize(ms, obj); ? ? ? ? ? ? ? ? return ms.GetBuffer(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? #endregion ? ? ? ? ? #region BytesToObject【函數(shù)】將一個(gè)序列化后的byte[]數(shù)組還原 ?? ? ? ? ? /// <summary>? ? ? ? ? /// 【函數(shù)】將一個(gè)序列化后的byte[]數(shù)組還原 ? ? ? ?? ? ? ? ? /// </summary> ? ? ? ? /// <param name="Bytes"></param> ? ? ? ?? ? ? ? ? /// <returns></returns>? ? ? ? ? public static object BytesToObject(byte[] Bytes) ? ? ? ? { ? ? ? ? ? ? using (MemoryStream ms = new MemoryStream(Bytes)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? IFormatter formatter = new BinaryFormatter(); ? ? ? ? ? ? ? ? return formatter.Deserialize(ms); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? #endregion
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C#使用Enum.TryParse()實(shí)現(xiàn)枚舉安全轉(zhuǎn)換
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的區(qū)別詳解
- C#(int)中Convert、Parse、TryParse的區(qū)別
- C#中對(duì)象與JSON字符串互相轉(zhuǎn)換的三種方式
- c#?如何將字符串轉(zhuǎn)換為大寫或小寫
- C#中字符串與字節(jié)數(shù)組的轉(zhuǎn)換方式
- C#日期格式字符串的相互轉(zhuǎn)換操作實(shí)例分析
- C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例
- C#實(shí)現(xiàn)char字符數(shù)組與字符串相互轉(zhuǎn)換的方法
- C# 中 TryParse如何將字符串轉(zhuǎn)換為特定類型
相關(guān)文章
C#請(qǐng)求唯一性校驗(yàn)支持高并發(fā)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于C#請(qǐng)求唯一性校驗(yàn)支持高并發(fā)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10C#?wpf使用DockPanel實(shí)現(xiàn)制作截屏框
做桌面客戶端的時(shí)候有時(shí)需要實(shí)現(xiàn)截屏功能,能夠在界面上框選截屏,本文就來為大家介紹一下wpf如何使用DockPanel制作截屏框吧,感興趣的可以了解下2023-09-09基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面
這篇文章主要為大家詳細(xì)介紹了如何基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04c#調(diào)用c++的DLL的實(shí)現(xiàn)方法
本文主要介紹了c#調(diào)用c++的DLL的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Unity ScrollView實(shí)現(xiàn)動(dòng)態(tài)列表生成
這篇文章主要為大家詳細(xì)介紹了Unity ScrollView實(shí)現(xiàn)動(dòng)態(tài)列表生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04