DataFunction.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace StandardLibrary
  7. {
  8. /// <summary>
  9. /// 数据类型转换专用类
  10. /// </summary>
  11. static class TypeConversion
  12. {
  13. /// <summary>
  14. /// 将16位整形转换成字节数组
  15. /// </summary>
  16. /// <param name="value">16位整形变量</param>
  17. /// <returns></returns>
  18. public static byte[] Short_Bytes(short[] value)
  19. {
  20. List<byte> bytes = new List<byte>();
  21. foreach (short I16 in value)
  22. bytes.AddRange(BitConverter.GetBytes(I16));
  23. byte[] Return = new byte[bytes.Count];
  24. bytes.CopyTo(Return, 0);
  25. return Return;
  26. }
  27. /// <summary>
  28. /// 将32位整形转换成字节数组,可传递任意数量的实参
  29. /// </summary>
  30. /// <param name="value">32位整形变量</param>
  31. /// <returns></returns>
  32. public static byte[] Int_Bytes(params int[] value)
  33. {
  34. List<byte> bytes = new List<byte>(256);
  35. foreach (int I32 in value) bytes.AddRange(BitConverter.GetBytes(I32));
  36. byte[] Return = new byte[bytes.Count];
  37. bytes.CopyTo(Return, 0);
  38. return Return;
  39. }
  40. /// <summary>
  41. /// 将64位整形转换成字节数组,可传递任意数量的实参
  42. /// </summary>
  43. /// <param name="value">64位整形变量</param>
  44. /// <returns></returns>
  45. public static byte[] Long_Bytes(params long[] value)
  46. {
  47. List<byte> bytes = new List<byte>(256);
  48. foreach (long I64 in value)
  49. bytes.AddRange(BitConverter.GetBytes(I64));
  50. byte[] Return = new byte[bytes.Count];
  51. bytes.CopyTo(Return, 0);
  52. return Return;
  53. }
  54. /// <summary>
  55. /// 将字节数组(2个元素)转换成16位有符号整形
  56. /// </summary>
  57. /// <param name="value">字节数组,低字节在前</param>
  58. /// <returns></returns>
  59. public static short Bytes_Short(byte[] value)
  60. {
  61. if (value == null || value.Length != 2) throw new IndexOutOfRangeException("数组元素大小必须等于2");
  62. return BitConverter.ToInt16(value, 0);
  63. }
  64. /// <summary>
  65. /// 将2个字节转换成16位有符号整形
  66. /// </summary>
  67. /// <param name="lowbyte">低字节</param>
  68. /// <param name="highbyte">高字节</param>
  69. /// <returns></returns>
  70. public static short Bytes_Short(byte lowbyte, byte highbyte)
  71. {
  72. byte[] value = new byte[2] { lowbyte, highbyte };
  73. return BitConverter.ToInt16(value, 0);
  74. }
  75. /// <summary>
  76. /// 将字节数组(4个元素)转换成32位有符号整形
  77. /// </summary>
  78. /// <param name="value">字节数组,低字节在前</param>
  79. /// <returns></returns>
  80. public static int Bytes_Int(byte[] value)
  81. {
  82. if (value == null || value.Length != 4) throw new IndexOutOfRangeException("数组元素大小必须等于4");
  83. return BitConverter.ToInt32(value, 0);
  84. }
  85. /// <summary>
  86. /// 将4个字节转换成32位有符号整形
  87. /// </summary>
  88. /// <param name="lowbyte">低字节</param>
  89. /// <param name="secondbyte">第二字节</param>
  90. /// <param name="thirdbyte">第三字节</param>
  91. /// <param name="highbyte">高字节</param>
  92. /// <returns></returns>
  93. public static int Bytes_Int(byte lowbyte, byte secondbyte, byte thirdbyte, byte highbyte)
  94. {
  95. byte[] value = new byte[4] { lowbyte, secondbyte, thirdbyte, highbyte };
  96. return BitConverter.ToInt32(value, 0);
  97. }
  98. /// <summary>
  99. /// 将字节数组(8个元素)转换成64位有符号整形
  100. /// </summary>
  101. /// <param name="value">字节数组,低字节在前</param>
  102. /// <returns></returns>
  103. public static long Bytes_Long(byte[] value)
  104. {
  105. if (value == null || value.Length != 8) throw new IndexOutOfRangeException("数组元素大小必须等于8");
  106. return BitConverter.ToInt64(value, 0);
  107. }
  108. /// <summary>
  109. /// 将8个字节转换成64位有符号整形
  110. /// </summary>
  111. /// <param name="lowbyte">低字节</param>
  112. /// <param name="second">第二字节</param>
  113. /// <param name="third">第三字节</param>
  114. /// <param name="fourth">第四字节</param>
  115. /// <param name="fifth">第五字节</param>
  116. /// <param name="sixth">第六字节</param>
  117. /// <param name="seventh">第七字节</param>
  118. /// <param name="highbyte">高字节</param>
  119. /// <returns></returns>
  120. public static long Bytes_Long(byte lowbyte, byte second, byte third, byte fourth, byte fifth, byte sixth, byte seventh, byte highbyte)
  121. {
  122. byte[] value = new byte[8] { lowbyte, second, third, fourth, fifth, sixth, seventh, highbyte };
  123. return BitConverter.ToInt64(value, 0);
  124. }
  125. /// <summary>
  126. /// 将32位浮点数转换成字节数组,可传递任意数量的实参
  127. /// </summary>
  128. /// <param name="value">32位浮点数变量</param>
  129. /// <returns></returns>
  130. public static byte[] Float_Bytes(params float[] value)
  131. {
  132. List<byte> bytes = new List<byte>(256);
  133. foreach (float F32 in value) bytes.AddRange(BitConverter.GetBytes(F32));
  134. byte[] Return = new byte[bytes.Count];
  135. bytes.CopyTo(Return, 0);
  136. return Return;
  137. }
  138. /// <summary>
  139. /// 将字节数组(4个元素)转换成32位浮点数
  140. /// </summary>
  141. /// <param name="value">字节数组,低字节在前</param>
  142. /// <returns></returns>
  143. public static float Bytes_Float(byte[] value)
  144. {
  145. if (value == null || value.Length != 4) throw new IndexOutOfRangeException("数组元素大小必须等于4");
  146. return BitConverter.ToSingle(value, 0);
  147. }
  148. /// <summary>
  149. /// 将64位浮点数转换成字节数组,可传递任意数量的实参
  150. /// </summary>
  151. /// <param name="value">64位浮点数变量</param>
  152. /// <returns></returns>
  153. public static byte[] Double_Bytes(params double[] value)
  154. {
  155. List<byte> bytes = new List<byte>(256);
  156. foreach (double F64 in value) bytes.AddRange(BitConverter.GetBytes(F64));
  157. byte[] Return = new byte[bytes.Count];
  158. bytes.CopyTo(Return, 0);
  159. return Return;
  160. }
  161. /// <summary>
  162. /// 将字节数组(8个元素)转换成64位浮点数
  163. /// </summary>
  164. /// <param name="value">字节数组,低字节在前</param>
  165. /// <returns></returns>
  166. public static double Bytes_Double(byte[] value)
  167. {
  168. if (value == null || value.Length != 8) throw new IndexOutOfRangeException("数组元素大小必须等于8");
  169. return BitConverter.ToDouble(value, 0);
  170. }
  171. /// <summary>
  172. /// 将bool数组(8个元素)转换成字节型
  173. /// </summary>
  174. /// <param name="value">bool数组</param>
  175. /// <returns></returns>
  176. public static byte Bools_Byte(bool[] value)
  177. {
  178. if (value.Length != 8) throw new IndexOutOfRangeException("数组元素大小必须等于8");
  179. byte Return = 0;
  180. foreach (bool a in value)
  181. {
  182. Return <<= 1;
  183. Return = a ? Return |= 1 : Return |= 0;
  184. }
  185. return Return;
  186. }
  187. /// <summary>
  188. /// 将bool数组(16个元素)转换成16位整形
  189. /// </summary>
  190. /// <param name="value">bool数组</param>
  191. /// <returns></returns>
  192. public static short Bools_Short(bool[] value)
  193. {
  194. if (value.Length != 16) throw new IndexOutOfRangeException("数组元素大小必须等于16");
  195. short Return = 0;
  196. foreach (bool a in value)
  197. {
  198. Return <<= 1;
  199. Return = a ? Return |= 1 : Return |= 0;
  200. }
  201. return Return;
  202. }
  203. /// <summary>
  204. /// 将bool数组(32个元素)转换成32位整形
  205. /// </summary>
  206. /// <param name="value">bool数组</param>
  207. /// <returns></returns>
  208. public static int Bools_Int(bool[] value)
  209. {
  210. if (value.Length != 32) throw new IndexOutOfRangeException("数组元素大小必须等于32");
  211. int Return = 0;
  212. foreach (bool a in value)
  213. {
  214. Return <<= 1;
  215. Return = a ? Return |= 1 : Return |= 0;
  216. }
  217. return Return;
  218. }
  219. /// <summary>
  220. /// 将字节变量转换成bool数组
  221. /// </summary>
  222. /// <param name="value">字节变量</param>
  223. /// <returns></returns>
  224. public static bool[] Byte_Bools(byte value)
  225. {
  226. bool[] Return = new bool[8];
  227. for (int i = 0; i < 8; i++)
  228. {
  229. byte transit = value;
  230. Return[i] = (transit &= 1) == 1 ? true : false;
  231. value >>= 1;
  232. }
  233. return Return;
  234. }
  235. /// <summary>
  236. /// 将16位无符号整形变量转换成bool数组
  237. /// </summary>
  238. /// <param name="value">16位无符号整形变量</param>
  239. /// <returns></returns>
  240. public static bool[] Short_Bools(short value)
  241. {
  242. bool[] Return = new bool[16];
  243. for (int i = 0; i < 16; i++)
  244. {
  245. short transit = value;
  246. Return[i] = (transit &= 1) == 1 ? true : false;
  247. value >>= 1;
  248. }
  249. return Return;
  250. }
  251. /// <summary>
  252. /// 将32位无符号整形变量转换成bool数组
  253. /// </summary>
  254. /// <param name="value">32位无符号整形变量</param>
  255. /// <returns></returns>
  256. public static bool[] Int_Bools(int value)
  257. {
  258. bool[] Return = new bool[32];
  259. for (int i = 0; i < 32; i++)
  260. {
  261. int transit = value;
  262. Return[i] = (transit &= 1) == 1 ? true : false;
  263. value >>= 1;
  264. }
  265. return Return;
  266. }
  267. /// <summary>
  268. /// 将任意长度的字符串转换成字节数组
  269. /// </summary>
  270. /// <param name="value">字符串</param>
  271. /// <returns></returns>
  272. public static byte[] Str_Bytes(string value)
  273. {
  274. if (value == null) throw new ArgumentNullException("字符串不能为空");
  275. return Encoding.UTF8.GetBytes(value);
  276. }
  277. /// <summary>
  278. /// 将单字符串转换成单字节
  279. /// </summary>
  280. /// <param name="value">字符串</param>
  281. /// <returns></returns>
  282. public static byte Str_Byte(string value)
  283. {
  284. if (value == null && value.Length == 1) throw new ArgumentNullException("字符串不能为空且长度必须为1");
  285. return Encoding.UTF8.GetBytes(value)[0];
  286. }
  287. /// <summary>
  288. /// 将任意长度的字节数组转换成字符串
  289. /// </summary>
  290. /// <param name="value">字节数组</param>
  291. /// <returns></returns>
  292. public static string Bytes_Str(byte[] value)
  293. {
  294. if (value == null) throw new ArgumentNullException("数组不能为空");
  295. return Encoding.UTF8.GetString(value);
  296. }
  297. /// <summary>
  298. /// 将16为整形变量转换成字符串
  299. /// </summary>
  300. /// <param name="value">16位整形变量数组</param>
  301. /// <returns></returns>
  302. public static string Shorts_Str(short[] value)
  303. {
  304. return Bytes_Str(Short_Bytes(value));
  305. }
  306. /// <summary>
  307. /// 将单个bool变量转换成单个字符
  308. /// </summary>
  309. /// <param name="value">bool变量</param>
  310. /// <returns>单字符</returns>
  311. public static string Bool_Str(bool value)
  312. {
  313. if (value) return "1";
  314. else return "0";
  315. }
  316. /// <summary>
  317. /// 将bool数组转换成字符串
  318. /// </summary>
  319. /// <param name="value">bool数组</param>
  320. /// <returns>字符串</returns>
  321. public static string Bools_Str(bool[] value)
  322. {
  323. string Return = "";
  324. foreach (bool a in value)
  325. {
  326. if (a) Return += "1";
  327. else Return += "0";
  328. }
  329. return Return;
  330. }
  331. /// <summary>
  332. /// 将字符串转换成16位整形数组
  333. /// </summary>
  334. /// <param name="value"></param>
  335. /// <returns></returns>
  336. public static short[] Str_Shorts(string value)
  337. {
  338. List<byte> bytes = new List<byte>();
  339. List<short> shorts = new List<short>();
  340. bytes.AddRange(Str_Bytes(value));
  341. while (bytes.Count > 0)
  342. {
  343. if (bytes.Count >= 2)
  344. {
  345. shorts.Add(Bytes_Short(bytes[0], bytes[1]));
  346. bytes.RemoveAt(0); bytes.RemoveAt(0);
  347. }
  348. else
  349. {
  350. shorts.Add(Bytes_Short(bytes[0], 0));
  351. bytes.Clear();
  352. }
  353. }
  354. short[] Return = new short[shorts.Count];
  355. shorts.CopyTo(Return, 0);
  356. return Return;
  357. }
  358. /// <summary>
  359. /// 将字符串转换成16进制指节数组
  360. /// </summary>
  361. /// <param name="value"></param>
  362. /// <returns></returns>
  363. public static byte[] Str_HexBytes(string hexString)
  364. {
  365. hexString = hexString.Replace(" ", "");
  366. if ((hexString.Length % 2) != 0)
  367. hexString += " ";
  368. byte[] returnBytes = new byte[hexString.Length / 2];
  369. for (int i = 0; i < returnBytes.Length; i++)
  370. returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Replace(" ", ""), 16);
  371. return returnBytes;
  372. }
  373. /// <summary>
  374. /// 16进制显示
  375. /// </summary>
  376. /// <param name="bytes"></param>
  377. /// <returns></returns>
  378. public static string byte_HexStr(byte[] bytes)
  379. {
  380. string returnStr = "";
  381. if (bytes != null)
  382. {
  383. for (int i = 0; i < bytes.Length; i++)
  384. {
  385. returnStr += bytes[i].ToString("X2");
  386. }
  387. }
  388. return returnStr;
  389. }
  390. /// <summary>
  391. /// 判断字符串是否可以转换成无符号整数
  392. /// </summary>
  393. /// <param name="value"></param>
  394. /// <returns></returns>
  395. public static bool JudgeInt(string value)
  396. {
  397. byte[] a = Str_Bytes(value);
  398. if (a.Length > 0)
  399. {
  400. bool Return = true;
  401. for (int i = 0; i < a.Length; i++)
  402. {
  403. if (a[i] < 48 || a[i] > 57)
  404. {
  405. Return = false;
  406. break;
  407. }
  408. }
  409. return Return;
  410. }
  411. else return false;
  412. }
  413. }
  414. }