mscorlib(4.0.0.0) API with additions
Hex.cs
1 namespace System.Security.Util
2 {
3  internal static class Hex
4  {
5  private static char HexDigit(int num)
6  {
7  return (char)((num < 10) ? (num + 48) : (num + 55));
8  }
9 
10  public static string EncodeHexString(byte[] sArray)
11  {
12  string result = null;
13  if (sArray != null)
14  {
15  char[] array = new char[sArray.Length * 2];
16  int i = 0;
17  int num = 0;
18  for (; i < sArray.Length; i++)
19  {
20  int num2 = (sArray[i] & 0xF0) >> 4;
21  array[num++] = HexDigit(num2);
22  num2 = (sArray[i] & 0xF);
23  array[num++] = HexDigit(num2);
24  }
25  result = new string(array);
26  }
27  return result;
28  }
29 
30  internal static string EncodeHexStringFromInt(byte[] sArray)
31  {
32  string result = null;
33  if (sArray != null)
34  {
35  char[] array = new char[sArray.Length * 2];
36  int num = sArray.Length;
37  int num2 = 0;
38  while (num-- > 0)
39  {
40  int num4 = (sArray[num] & 0xF0) >> 4;
41  array[num2++] = HexDigit(num4);
42  num4 = (sArray[num] & 0xF);
43  array[num2++] = HexDigit(num4);
44  }
45  result = new string(array);
46  }
47  return result;
48  }
49 
50  public static int ConvertHexDigit(char val)
51  {
52  if (val <= '9' && val >= '0')
53  {
54  return val - 48;
55  }
56  if (val >= 'a' && val <= 'f')
57  {
58  return val - 97 + 10;
59  }
60  if (val >= 'A' && val <= 'F')
61  {
62  return val - 65 + 10;
63  }
64  throw new ArgumentException(Environment.GetResourceString("ArgumentOutOfRange_Index"));
65  }
66 
67  public static byte[] DecodeHexString(string hexString)
68  {
69  if (hexString == null)
70  {
71  throw new ArgumentNullException("hexString");
72  }
73  bool flag = false;
74  int num = 0;
75  int num2 = hexString.Length;
76  if (num2 >= 2 && hexString[0] == '0' && (hexString[1] == 'x' || hexString[1] == 'X'))
77  {
78  num2 = hexString.Length - 2;
79  num = 2;
80  }
81  if (num2 % 2 != 0 && num2 % 3 != 2)
82  {
83  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidHexFormat"));
84  }
85  byte[] array;
86  if (num2 >= 3 && hexString[num + 2] == ' ')
87  {
88  flag = true;
89  array = new byte[num2 / 3 + 1];
90  }
91  else
92  {
93  array = new byte[num2 / 2];
94  }
95  int num3 = 0;
96  while (num < hexString.Length)
97  {
98  int num4 = ConvertHexDigit(hexString[num]);
99  int num5 = ConvertHexDigit(hexString[num + 1]);
100  array[num3] = (byte)(num5 | (num4 << 4));
101  if (flag)
102  {
103  num++;
104  }
105  num += 2;
106  num3++;
107  }
108  return array;
109  }
110  }
111 }