本文为《c#扩展方法奇思妙用》系列文章基础篇,比较简单,没有太多技术含量,不用太多解释。同前面,主要提供大家一个思路,如需要使用,请自行完善。
转换为十六进制字符串
1 public static string ToHex(this byte b)
2 {
3 return b.ToString("X2");
4 }
5
6 public static string ToHex(this IEnumerable<byte> bytes)
7 {
8 var sb = new StringBuilder();
9 foreach (byte b in bytes)
10 sb.Append(b.ToString("X2"));
11 return sb.ToString();
12 }
2 {
3 return b.ToString("X2");
4 }
5
6 public static string ToHex(this IEnumerable<byte> bytes)
7 {
8 var sb = new StringBuilder();
9 foreach (byte b in bytes)
10 sb.Append(b.ToString("X2"));
11 return sb.ToString();
12 }
第二个扩展返回的十六进制字符串是连着的,一些情况下为了阅读方便会用一个空格分开,处理比较简单,不再给出示例。
转换为Base64字符串
1 public static string ToBase64String(byte[] bytes)
2 {
3 return Convert.ToBase64String(bytes);
4 }
2 {
3 return Convert.ToBase64String(bytes);
4 }
转换为基础数据类型
1 public static int ToInt(this byte[] value, int startIndex)
2 {
3 return BitConverter.ToInt32(value, startIndex);
4 }
5 public static long ToInt64(this byte[] value, int startIndex)
6 {
7 return BitConverter.ToInt64(value, startIndex);
8 }
2 {
3 return BitConverter.ToInt32(value, startIndex);
4 }
5 public static long ToInt64(this byte[] value, int startIndex)
6 {
7 return BitConverter.ToInt64(value, startIndex);
8 }
BitConverter类还有很多方法(ToSingle、ToDouble、ToChar...),可以如上进行扩展。
转换为指定编码的字符串
1 public static string Decode(this byte[] data, Encoding encoding)
2 {
3 return encoding.GetString(data);
4 }
2 {
3 return encoding.GetString(data);
4 }
Hash
1 //使用指定算法Hash
2 public static byte[] Hash(this byte[] data, string hashName)
3 {
4 HashAlgorithm algorithm;
5 if (string.IsNullOrEmpty(hashName)) algorithm = HashAlgorithm.Create();
6 else algorithm = HashAlgorithm.Create(hashName);
7 return algorithm.ComputeHash(data);
8 }
9 //使用默认算法Hash
10 public static byte[] Hash(this byte[] data)
11 {
12 return Hash(data, null);
13 }
2 public static byte[] Hash(this byte[] data, string hashName)
3 {
4 HashAlgorithm algorithm;
5 if (string.IsNullOrEmpty(hashName)) algorithm = HashAlgorithm.Create();
6 else algorithm = HashAlgorithm.Create(hashName);
7 return algorithm.ComputeHash(data);
8 }
9 //使用默认算法Hash
10 public static byte[] Hash(this byte[] data)
11 {
12 return Hash(data, null);
13 }
位运算
1 //index从0开始
2 //获取取第index是否为1
3 public static bool GetBit(this byte b, int index)
4 {
5 return (b & (1 << index)) > 0;
6 }
7 //将第index位设为1
8 public static byte SetBit(this byte b, int index)
9 {
10 b |= (byte)(1 << index);
11 return b;
12 }
13 //将第index位设为0
14 public static byte ClearBit(this byte b, int index)
15 {
16 b &= (byte)((1 << 8) - 1 - (1 << index));
17 return b;
18 }
19 //将第index位取反
20 public static byte ReverseBit(this byte b, int index)
21 {
22 b ^= (byte)(1 << index);
23 return b;
24 }
2 //获取取第index是否为1
3 public static bool GetBit(this byte b, int index)
4 {
5 return (b & (1 << index)) > 0;
6 }
7 //将第index位设为1
8 public static byte SetBit(this byte b, int index)
9 {
10 b |= (byte)(1 << index);
11 return b;
12 }
13 //将第index位设为0
14 public static byte ClearBit(this byte b, int index)
15 {
16 b &= (byte)((1 << 8) - 1 - (1 << index));
17 return b;
18 }
19 //将第index位取反
20 public static byte ReverseBit(this byte b, int index)
21 {
22 b ^= (byte)(1 << index);
23 return b;
24 }
保存为文件
1 public static void Save(this byte[] data, string path)
2 {
3 File.WriteAllBytes(path, data);
4 }
2 {
3 File.WriteAllBytes(path, data);
4 }
转换为内存流
1 public static MemoryStream ToMemoryStream(this byte[] data)
2 {
3 return new MemoryStream(data);
4 }
2 {
3 return new MemoryStream(data);
4 }
小结
能想到的就这么多了!欢迎大家补充!
《c#扩展方法奇思妙用》系列文章已有10篇,以后还会陆续发表一些,敬请关注!