BinaryHelper.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace WCS_Client
  6. {
  7. public class BinaryHelper
  8. {
  9. /// <summary>
  10. /// Char字符转成7位二进制
  11. /// </summary>
  12. /// <param name="ss"></param>
  13. /// <returns></returns>
  14. public string StringToBinary(string ss)
  15. {
  16. byte[] u = Encoding.ASCII.GetBytes(ss);
  17. string binaryNum = string.Empty;
  18. string result = string.Empty;
  19. foreach (byte a in u)
  20. {
  21. binaryNum = Convert.ToString(a, 2);
  22. if (binaryNum.Length < 7)
  23. {
  24. for (int i = 0; i < 7 - binaryNum.Length; i++)
  25. {
  26. binaryNum = '0' + binaryNum;
  27. }
  28. }
  29. result += binaryNum;
  30. }
  31. return result;
  32. }
  33. /// <summary>
  34. /// 存储二进制的字符串转成对应的数据
  35. /// </summary>
  36. /// <param name="binstr"></param>
  37. /// <returns></returns>
  38. public string BinaryToString(string binstr)
  39. {
  40. char[] np = binstr.ToCharArray();//"1000001000000001100010110010".ToCharArray();
  41. string username = "";
  42. string password = "";
  43. bool flag = false;
  44. string result = "";
  45. for (int i = 0; i < np.Length; i++)
  46. {
  47. result += np[i];
  48. if (result.Length % 7 == 0)
  49. {
  50. if (Convert.ToInt32(result, 2) == 0)
  51. {
  52. flag = true;
  53. result = string.Empty;
  54. continue;
  55. }
  56. if (flag)
  57. password += Convert.ToChar(Convert.ToInt32(result, 2));
  58. else
  59. username += Convert.ToChar(Convert.ToInt32(result, 2));
  60. result = string.Empty;
  61. }
  62. }
  63. return result;
  64. }
  65. /// <summary>
  66. /// 将字符串转成二进制
  67. /// </summary>
  68. /// <param name="s"></param>
  69. /// <returns></returns>
  70. public static string bianma(string s)
  71. {
  72. byte[] data = Encoding.Unicode.GetBytes(s);
  73. StringBuilder result = new StringBuilder(data.Length * 8);
  74. foreach (byte b in data)
  75. {
  76. result.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
  77. }
  78. return result.ToString();
  79. }
  80. //public static byte[] bianma2(string s)
  81. //{
  82. // byte[] data = Encoding.Unicode.GetBytes(s);
  83. // return data;
  84. //}
  85. /// <summary>
  86. /// 将二进制转成字符串
  87. /// </summary>
  88. /// <param name="s"></param>
  89. /// <returns></returns>
  90. public static string jiema(string s)
  91. {
  92. System.Text.RegularExpressions.CaptureCollection cs =
  93. System.Text.RegularExpressions.Regex.Match(s, @"([01]{8})+").Groups[1].Captures;
  94. byte[] data = new byte[cs.Count];
  95. for (int i = 0; i < cs.Count; i++)
  96. {
  97. data[i] = Convert.ToByte(cs[i].Value, 2);
  98. }
  99. return Encoding.Unicode.GetString(data, 0, data.Length);
  100. }
  101. public static string jiema2(byte[] data)
  102. {
  103. return Encoding.Unicode.GetString(data, 0, data.Length);
  104. }
  105. /// <summary>
  106. /// byte数组转二进制样式的字符串
  107. /// </summary>
  108. /// <param name="byteArr">byte数组</param>
  109. /// <returns></returns>
  110. public static string ByteArray2BinaryStr(byte[] byteArr)
  111. {
  112. List<string> strList = new List<string>();
  113. var bl = byteArr.Length;
  114. if (bl == 0)
  115. return "";
  116. else
  117. {
  118. var tempStr = string.Empty;
  119. for (var i = 0; i < bl; i++)
  120. {
  121. tempStr = Convert.ToString(byteArr[i], 2);
  122. if (tempStr.Length < 4)
  123. tempStr = tempStr.PadLeft(4, '0');
  124. strList.Add(tempStr);
  125. }
  126. }
  127. return string.Join("", strList.ToArray());
  128. }
  129. /// <summary>
  130. /// 二进制样式的字符串转byte数组
  131. /// </summary>
  132. /// <param name="binaryStr">二进制样式的字符串</param>
  133. /// <returns></returns>
  134. public static byte[] BinaryStr2ByteArray(string binaryStr)
  135. {
  136. if (string.IsNullOrEmpty(binaryStr)) binaryStr = string.Empty;
  137. List<byte> byte_List = new List<byte>();
  138. var strL = binaryStr.Length;
  139. if (strL == 0)
  140. byte_List.Add(0);
  141. else if (strL > 0 && strL <= 4)
  142. byte_List.Add(Convert.ToByte(binaryStr, 2));
  143. else
  144. {
  145. var tempStr = string.Empty;
  146. for (var i = strL; i > 0; i = i - 4)
  147. {
  148. if (i - 4 > 0)
  149. tempStr = binaryStr.Substring(i - 4, 4);
  150. else
  151. tempStr = binaryStr.Substring(0, i);
  152. byte_List.Add(Convert.ToByte(tempStr, 2));
  153. }
  154. }
  155. byte_List.Reverse();
  156. return byte_List.ToArray();
  157. }
  158. }
  159. }