c#扩展方法奇思妙用基础篇三:byte 常用扩展
2010-09-30 20:50:47 来源:WEB开发网应用一:转换为十六进制字符串
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 }
能想到的就这么多了!
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接