ConvertHelper.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Web;
  9. namespace PersonalBlog.Tools
  10. {
  11. /// <summary>
  12. /// 处理数据类型转换,数制转换、编码转换相关的类
  13. /// </summary>
  14. public class ConvertHelper
  15. {
  16. #region 补足位数
  17. /// <summary>
  18. /// 指定字符串的固定长度,如果字符串小于固定长度,
  19. /// 则在字符串的前面补足零,可设置的固定长度最大为9位
  20. /// </summary>
  21. /// <param name="text">原始字符串</param>
  22. /// <param name="limitedLength">字符串的固定长度</param>
  23. public static string RepairZero(string text, int limitedLength)
  24. {
  25. //补足0的字符串
  26. string temp = "";
  27. //补足0
  28. for (int i = 0; i < limitedLength - text.Length; i++)
  29. {
  30. temp += "0";
  31. }
  32. //连接text
  33. temp += text;
  34. //返回补足0的字符串
  35. return temp;
  36. }
  37. #endregion
  38. #region 各进制数间转换
  39. /// <summary>
  40. /// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。
  41. /// </summary>
  42. /// <param name="value">要转换的值,即原值</param>
  43. /// <param name="from">原值的进制,只能是2,8,10,16四个值。</param>
  44. /// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param>
  45. public static string ConvertBase(string value, int from, int to)
  46. {
  47. try
  48. {
  49. int intValue = Convert.ToInt32(value, from); //先转成10进制
  50. string result = Convert.ToString(intValue, to); //再转成目标进制
  51. if (to == 2)
  52. {
  53. int resultLength = result.Length; //获取二进制的长度
  54. switch (resultLength)
  55. {
  56. case 7:
  57. result = "0" + result;
  58. break;
  59. case 6:
  60. result = "00" + result;
  61. break;
  62. case 5:
  63. result = "000" + result;
  64. break;
  65. case 4:
  66. result = "0000" + result;
  67. break;
  68. case 3:
  69. result = "00000" + result;
  70. break;
  71. }
  72. }
  73. return result;
  74. }
  75. catch
  76. {
  77. //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
  78. return "0";
  79. }
  80. }
  81. #endregion
  82. #region 使用指定字符集将string转换成byte[]
  83. /// <summary>
  84. /// 使用指定字符集将string转换成byte[]
  85. /// </summary>
  86. /// <param name="text">要转换的字符串</param>
  87. /// <param name="encoding">字符编码</param>
  88. public static byte[] StringToBytes(string text, Encoding encoding)
  89. {
  90. return encoding.GetBytes(text);
  91. }
  92. #endregion
  93. #region 使用指定字符集将byte[]转换成string
  94. /// <summary>
  95. /// 使用指定字符集将byte[]转换成string
  96. /// </summary>
  97. /// <param name="bytes">要转换的字节数组</param>
  98. /// <param name="encoding">字符编码</param>
  99. public static string BytesToString(byte[] bytes, Encoding encoding)
  100. {
  101. return encoding.GetString(bytes);
  102. }
  103. #endregion
  104. #region 将byte[]转换成int
  105. /// <summary>
  106. /// 将byte[]转换成int
  107. /// </summary>
  108. /// <param name="data">需要转换成整数的byte数组</param>
  109. public static int BytesToInt32(byte[] data)
  110. {
  111. //如果传入的字节数组长度小于4,则返回0
  112. if (data.Length < 4)
  113. {
  114. return 0;
  115. }
  116. //定义要返回的整数
  117. int num = 0;
  118. //如果传入的字节数组长度大于4,需要进行处理
  119. if (data.Length >= 4)
  120. {
  121. //创建一个临时缓冲区
  122. byte[] tempBuffer = new byte[4];
  123. //将传入的字节数组的前4个字节复制到临时缓冲区
  124. Buffer.BlockCopy(data, 0, tempBuffer, 0, 4);
  125. //将临时缓冲区的值转换成整数,并赋给num
  126. num = BitConverter.ToInt32(tempBuffer, 0);
  127. }
  128. //返回整数
  129. return num;
  130. }
  131. #endregion
  132. #region Bitmap 和 byte[] 互相转换
  133. /// <summary>
  134. /// byte[] 转换 Bitmap
  135. /// </summary>
  136. /// <param name="Bytes"></param>
  137. /// <returns></returns>
  138. public static Bitmap BytesToBitmap(byte[] Bytes)
  139. {
  140. MemoryStream stream = null;
  141. try
  142. {
  143. stream = new MemoryStream(Bytes);
  144. return new Bitmap((Image)new Bitmap(stream));
  145. }
  146. catch (ArgumentNullException ex)
  147. {
  148. throw ex;
  149. }
  150. catch (ArgumentException ex)
  151. {
  152. throw ex;
  153. }
  154. finally
  155. {
  156. stream.Close();
  157. }
  158. }
  159. /// <summary>
  160. /// Bitmap转byte[]
  161. /// </summary>
  162. /// <param name="Bitmap"></param>
  163. /// <returns></returns>
  164. public static byte[] BitmapToBytes(Bitmap bitmap)
  165. {
  166. MemoryStream ms = null;
  167. try
  168. {
  169. ms = new MemoryStream();
  170. bitmap.Save(ms, ImageFormat.Jpeg);
  171. byte[] byteImage = new Byte[ms.Length];
  172. byteImage = ms.ToArray();
  173. return byteImage;
  174. }
  175. catch (ArgumentNullException ex)
  176. {
  177. throw ex;
  178. }
  179. finally
  180. {
  181. ms.Close();
  182. }
  183. }
  184. #endregion
  185. /// <summary>
  186. /// byte[]转换成Image
  187. /// </summary>
  188. /// <param name="byteArrayIn">二进制图片流</param>
  189. /// <returns>Image</returns>
  190. public static System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
  191. {
  192. if (byteArrayIn == null)
  193. return null;
  194. using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArrayIn))
  195. {
  196. System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
  197. ms.Flush();
  198. return returnImage;
  199. }
  200. }
  201. /// <summary>
  202. /// 将图片Image转换成Byte[]
  203. /// </summary>
  204. /// <param name="Image">image对象</param>
  205. /// <param name="imageFormat">后缀名</param>
  206. /// <returns></returns>
  207. public static byte[] ImageToBytes(Image Image, System.Drawing.Imaging.ImageFormat imageFormat)
  208. {
  209. if (Image == null) { return null; }
  210. byte[] data = null;
  211. using (MemoryStream ms = new MemoryStream())
  212. {
  213. using (Bitmap Bitmap = new Bitmap(Image))
  214. {
  215. Bitmap.Save(ms, imageFormat);
  216. ms.Position = 0;
  217. data = new byte[ms.Length];
  218. ms.Read(data, 0, Convert.ToInt32(ms.Length));
  219. ms.Flush();
  220. }
  221. }
  222. return data;
  223. }
  224. }
  225. }