zoukankan      html  css  js  c++  java
  • c# 扩展方法奇思妙用基础篇三:byte 常用扩展

    本文为《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篇,以后还会陆续发表一些,敬请关注!

  • 相关阅读:
    网络编程(一)--网络编程介绍
    Python与设计模式之单例模式
    面向对象(六)--元类
    面向对象(五)--isinstance与issubclass方法、反射、内置方法(部分)、异常处理
    面向对象(四)--绑定方法与非绑定方法(classmethod、staticmethod装饰器)
    面向对象(三)--多态、封装、property装饰器
    面向对象(二)--继承与派生、组合
    Django之中间件
    Django之auth认证
    Django之form主键
  • 原文地址:https://www.cnblogs.com/ldp615/p/1552133.html
Copyright © 2011-2022 走看看