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