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

  • 相关阅读:
    JQ-动画合集(ing...)
    CSS-各种cs样式之浏览器兼容处理方式汇总大全(更新中...)
    CSS-用伪元素制作小箭头(轮播图的左右切换btn)
    CSS-垂直|水平居中问题的解决方法总结
    JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器
    canvas-渐变文字
    HTML-一个网页的头部的大概框架(完善ing)
    JS-面向对象
    CSS-border属性制作小三角
    JS事件-事件处理程序-笔记总结ing...
  • 原文地址:https://www.cnblogs.com/ldp615/p/1552133.html
Copyright © 2011-2022 走看看