123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Web;
- namespace PersonalBlog.Tools
- {
- /// <summary>
- /// 处理数据类型转换,数制转换、编码转换相关的类
- /// </summary>
- public class ConvertHelper
- {
- #region 补足位数
- /// <summary>
- /// 指定字符串的固定长度,如果字符串小于固定长度,
- /// 则在字符串的前面补足零,可设置的固定长度最大为9位
- /// </summary>
- /// <param name="text">原始字符串</param>
- /// <param name="limitedLength">字符串的固定长度</param>
- public static string RepairZero(string text, int limitedLength)
- {
- //补足0的字符串
- string temp = "";
- //补足0
- for (int i = 0; i < limitedLength - text.Length; i++)
- {
- temp += "0";
- }
- //连接text
- temp += text;
- //返回补足0的字符串
- return temp;
- }
- #endregion
- #region 各进制数间转换
- /// <summary>
- /// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。
- /// </summary>
- /// <param name="value">要转换的值,即原值</param>
- /// <param name="from">原值的进制,只能是2,8,10,16四个值。</param>
- /// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param>
- public static string ConvertBase(string value, int from, int to)
- {
- try
- {
- int intValue = Convert.ToInt32(value, from); //先转成10进制
- string result = Convert.ToString(intValue, to); //再转成目标进制
- if (to == 2)
- {
- int resultLength = result.Length; //获取二进制的长度
- switch (resultLength)
- {
- case 7:
- result = "0" + result;
- break;
- case 6:
- result = "00" + result;
- break;
- case 5:
- result = "000" + result;
- break;
- case 4:
- result = "0000" + result;
- break;
- case 3:
- result = "00000" + result;
- break;
- }
- }
- return result;
- }
- catch
- {
- //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
- return "0";
- }
- }
- #endregion
- #region 使用指定字符集将string转换成byte[]
- /// <summary>
- /// 使用指定字符集将string转换成byte[]
- /// </summary>
- /// <param name="text">要转换的字符串</param>
- /// <param name="encoding">字符编码</param>
- public static byte[] StringToBytes(string text, Encoding encoding)
- {
- return encoding.GetBytes(text);
- }
- #endregion
- #region 使用指定字符集将byte[]转换成string
- /// <summary>
- /// 使用指定字符集将byte[]转换成string
- /// </summary>
- /// <param name="bytes">要转换的字节数组</param>
- /// <param name="encoding">字符编码</param>
- public static string BytesToString(byte[] bytes, Encoding encoding)
- {
- return encoding.GetString(bytes);
- }
- #endregion
- #region 将byte[]转换成int
- /// <summary>
- /// 将byte[]转换成int
- /// </summary>
- /// <param name="data">需要转换成整数的byte数组</param>
- public static int BytesToInt32(byte[] data)
- {
- //如果传入的字节数组长度小于4,则返回0
- if (data.Length < 4)
- {
- return 0;
- }
- //定义要返回的整数
- int num = 0;
- //如果传入的字节数组长度大于4,需要进行处理
- if (data.Length >= 4)
- {
- //创建一个临时缓冲区
- byte[] tempBuffer = new byte[4];
- //将传入的字节数组的前4个字节复制到临时缓冲区
- Buffer.BlockCopy(data, 0, tempBuffer, 0, 4);
- //将临时缓冲区的值转换成整数,并赋给num
- num = BitConverter.ToInt32(tempBuffer, 0);
- }
- //返回整数
- return num;
- }
- #endregion
- #region Bitmap 和 byte[] 互相转换
- /// <summary>
- /// byte[] 转换 Bitmap
- /// </summary>
- /// <param name="Bytes"></param>
- /// <returns></returns>
- public static Bitmap BytesToBitmap(byte[] Bytes)
- {
- MemoryStream stream = null;
- try
- {
- stream = new MemoryStream(Bytes);
- return new Bitmap((Image)new Bitmap(stream));
- }
- catch (ArgumentNullException ex)
- {
- throw ex;
- }
- catch (ArgumentException ex)
- {
- throw ex;
- }
- finally
- {
- stream.Close();
- }
- }
- /// <summary>
- /// Bitmap转byte[]
- /// </summary>
- /// <param name="Bitmap"></param>
- /// <returns></returns>
- public static byte[] BitmapToBytes(Bitmap bitmap)
- {
- MemoryStream ms = null;
- try
- {
- ms = new MemoryStream();
- bitmap.Save(ms, ImageFormat.Jpeg);
- byte[] byteImage = new Byte[ms.Length];
- byteImage = ms.ToArray();
- return byteImage;
- }
- catch (ArgumentNullException ex)
- {
- throw ex;
- }
- finally
- {
- ms.Close();
- }
- }
- #endregion
- /// <summary>
- /// byte[]转换成Image
- /// </summary>
- /// <param name="byteArrayIn">二进制图片流</param>
- /// <returns>Image</returns>
- public static System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
- {
- if (byteArrayIn == null)
- return null;
- using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArrayIn))
- {
- System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
- ms.Flush();
- return returnImage;
- }
- }
- /// <summary>
- /// 将图片Image转换成Byte[]
- /// </summary>
- /// <param name="Image">image对象</param>
- /// <param name="imageFormat">后缀名</param>
- /// <returns></returns>
- public static byte[] ImageToBytes(Image Image, System.Drawing.Imaging.ImageFormat imageFormat)
- {
- if (Image == null) { return null; }
- byte[] data = null;
- using (MemoryStream ms = new MemoryStream())
- {
- using (Bitmap Bitmap = new Bitmap(Image))
- {
- Bitmap.Save(ms, imageFormat);
- ms.Position = 0;
- data = new byte[ms.Length];
- ms.Read(data, 0, Convert.ToInt32(ms.Length));
- ms.Flush();
- }
- }
- return data;
- }
- }
- }
|