代码改变世界

c# 扩展方法奇思妙用基础篇三:byte 常用扩展

2009-08-22 21:11  鹤冲天  阅读(9335)  评论(10编辑  收藏  举报

本文为《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     }

 第二个扩展返回的十六进制字符串是连着的,一些情况下为了阅读方便会用一个空格分开,处理比较简单,不再给出示例。

转换为Base64字符串

1     public static string ToBase64String(byte[] bytes)
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     }

  BitConverter类还有很多方法(ToSingle、ToDouble、ToChar...),可以如上进行扩展。

转换为指定编码的字符串 

1     public static string Decode(this byte[] data, Encoding encoding)
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     }

位运算

 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     }

保存为文件 

1     public static void Save(this byte[] data, string path)
2     {
3         File.WriteAllBytes(path, data);
4     }

转换为内存流 

1     public static MemoryStream ToMemoryStream(this byte[] data)
2     {
3         return new MemoryStream(data);
4     }

小结

  能想到的就这么多了!欢迎大家补充!

 《c#扩展方法奇思妙用》系列文章已有10篇,以后还会陆续发表一些,敬请关注!