StrHexHelper.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace StressClient.Common
  7. {
  8. public class StrHexHelper
  9. {
  10. // 字符串转16进制字符串 AB-->4142
  11. public static string StrToHexStr(string str, Encoding encode)
  12. {
  13. byte[] b = encode.GetBytes(str);
  14. string result = string.Empty;
  15. foreach (var t in b)
  16. {
  17. result += Convert.ToString(t, 16);
  18. }
  19. return result;
  20. }
  21. // 将16进制字符串转换到byte[]
  22. public static byte[] HexStrToArray(string str)
  23. {
  24. int count = str.Length / 2;
  25. byte[] b = new byte[count];
  26. for (int i = 0; i < count; i++)
  27. {
  28. string val = "0x" + str.Substring(i * 2, 2);
  29. b[i] = Convert.ToByte(val, 16); // '0x41'->65
  30. }
  31. return b;
  32. }
  33. public static string do_CRC(byte[] data)
  34. {
  35. uint crc = 0xFFFF;
  36. foreach (var pos in data)
  37. {
  38. crc = (crc >> 8) ^ pos;
  39. for (int i = 0; i < 8; i++)
  40. {
  41. var check = (byte)(crc & 0x0001);
  42. crc >>= 1;
  43. if (check == 0x0001)
  44. crc ^= 0xA001;
  45. }
  46. }
  47. //string ret_str = Convert.ToString(crc, 16);
  48. string ret_str = crc.ToString("X4"); ;
  49. return ret_str.ToUpper();
  50. }
  51. public static string do_CRC16(byte[] data)
  52. {
  53. byte[] returnVal = new byte[2];
  54. byte CRC16Lo, CRC16Hi, CL, CH, SaveHi, SaveLo;
  55. int i, Flag;
  56. CRC16Lo = 0xFF;
  57. CRC16Hi = 0xFF;
  58. CL = 0x86;
  59. CH = 0x68;
  60. for (i = 0; i < data.Length; i++)
  61. {
  62. CRC16Lo = (byte)(CRC16Lo ^ data[i]);//每一个数据与CRC寄存器进行异或
  63. for (Flag = 0; Flag <= 7; Flag++)
  64. {
  65. SaveHi = CRC16Hi;
  66. SaveLo = CRC16Lo;
  67. CRC16Hi = (byte)(CRC16Hi >> 1);//高位右移一位
  68. CRC16Lo = (byte)(CRC16Lo >> 1);//低位右移一位
  69. if ((SaveHi & 0x01) == 0x01)//如果高位字节最后一位为
  70. {
  71. CRC16Lo = (byte)(CRC16Lo | 0x80);//则低位字节右移后前面补 否则自动补0
  72. }
  73. if ((SaveLo & 0x01) == 0x01)//如果LSB为1,则与多项式码进行异或
  74. {
  75. CRC16Hi = (byte)(CRC16Hi ^ CH);
  76. CRC16Lo = (byte)(CRC16Lo ^ CL);
  77. }
  78. }
  79. }
  80. returnVal[0] = CRC16Hi;//CRC高位
  81. returnVal[1] = CRC16Lo;//CRC低位
  82. return Encoding.UTF8.GetString(returnVal);
  83. }
  84. }
  85. public class Helper
  86. {
  87. public static decimal GetRan(int val, int diff, decimal k = 1)
  88. {
  89. if (k <= 0)
  90. return 0;
  91. System.Threading.Thread.Sleep(new Random().Next(10, 30));
  92. var ran = Convert.ToDecimal(new Random(DateTime.Now.Millisecond).Next(val - diff, val + diff)) / k;
  93. return ran;
  94. }
  95. }
  96. }