[C#]我自己写的一个对字节中每位进行修改值的函数

简介:

位操作方法

代码如下:

1. 设置字节中某位的值

static  public  Byte s_SetBit(Byte byTargetByte, int  nTargetPos, int  nValue)
{
     int  nValueOfTargetPos = -1;
 
     if  (nValue != 0 && nValue != 1)
     {
         return  0;
     }
     if  (!(nTargetPos >= 0 && nTargetPos < 8))
     {
         return  0;
     }
 
     switch  (nTargetPos)
     {
         case  0:
             nValueOfTargetPos = (byTargetByte >> 7) & 0x01;
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x80);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0x7f);
             }
             break ;
 
         case  1:
             nValueOfTargetPos = (byTargetByte >> 6) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x40);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xbf);
             }
             break ;
 
         case  2:
             nValueOfTargetPos = (byTargetByte >> 5) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x20);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xdf);
             }
             break ;
 
         case  3:
             nValueOfTargetPos = (byTargetByte >> 4) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x10);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xef);
             }
             break ;
 
         case  4:
             nValueOfTargetPos = (byTargetByte >> 3) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x08);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xf7);
             }
             break ;
 
         case  5:
             nValueOfTargetPos = (byTargetByte >> 2) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x04);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xfb);
             }
             break ;
 
         case  6:
             nValueOfTargetPos = (byTargetByte >> 1) & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x02);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xfd);
             }
             break ;
 
         case  7:
             nValueOfTargetPos = byTargetByte & 0x01;
 
             if  (nValue == 1)
             {
                 byTargetByte = Convert.ToByte(byTargetByte | 0x01);
             }
             else  if  (nValue == 0)
             {
                 byTargetByte = Convert.ToByte(byTargetByte & 0xfe);
             }
             break ;
 
         default :
             break ;
     }
 
     if  (nValueOfTargetPos != -1)
     {
         return  byTargetByte;
     }
     else
     {
         return  0;
     }
}


测试案例:

把每位全为1的字节置0

Byte b = Convert.ToByte(0xff);
richTextBoxMain.Text = "byte初始状态: "  + Convert.ToString(b, 2).PadLeft(8, '0' ) + "\r\n" ;
for  ( int  i = 0; i < 8; i++)
{
     b = s_SetBit(b, i, 0);
     richTextBoxMain.Text += "byte修改第"  + i + "位后的结果: " ;
     richTextBoxMain.Text += Convert.ToString(b, 2).PadLeft(8, '0' ) + "\r\n" ;
}

结果如下:

byte初始状态: 11111111
byte修改第0位后的结果: 01111111
byte修改第1位后的结果: 00111111
byte修改第2位后的结果: 00011111
byte修改第3位后的结果: 00001111
byte修改第4位后的结果: 00000111
byte修改第5位后的结果: 00000011
byte修改第6位后的结果: 00000001
byte修改第7位后的结果: 00000000

 

 

2. 获得字节中某位的值

static  public  int  s_GetBit(Byte byTargetByte, int  nTargetPos)
{
     int  nValue = -1;
 
     switch  (nTargetPos)
     {
         case  0:
             nValue = (byTargetByte >> 7) & 0x01;
             break ;
         case  1:
             nValue = (byTargetByte >> 6) & 0x01;
             break ;
         case  2:
             nValue = (byTargetByte >> 5) & 0x01;
             break ;
         case  3:
             nValue = (byTargetByte >> 4) & 0x01;
             break ;
         case  4:
             nValue = (byTargetByte >> 3) & 0x01;
             break ;
         case  5:
             nValue = (byTargetByte >> 2) & 0x01;
             break ;
         case  6:
             nValue = (byTargetByte >> 1) & 0x01;
             break ;
         case  7:
             nValue = byTargetByte & 0x01;
             break ;
         default :
             break ;
     }
 
     return  nValue;
}

本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/archive/2011/07/27/2118291.html,如需转载请自行联系原作者

 

相关文章
|
JavaScript 前端开发 Java
javascript实现像java、c#之类的sleep暂停的函数功能
javascript实现像java、c#之类的sleep暂停的函数功能
242 0
C# 中关于补位的写法 PadLeft,PadRight 函数
C# 中的 `PadLeft` 和 `PadRight` 是 String 类提供的用于字符串补位的实用方法。`PadLeft` 在字符串左侧填充指定字符,使其达到指定长度;`PadRight` 则在右侧填充。两者通过检查原字符串长度,计算需填充字符数,并创建新字符数组完成操作。时间复杂度为 O(n),适用于简单补位场景,但在大量操作时需注意性能影响。示例代码展示了如何使用这两个方法进行补位操作。
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
261 1
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
159 0
|
C#
利用最小二乘法拟合任意次函数曲线(C#)
原文:利用最小二乘法拟合任意次函数曲线(C#) ///     ///用最小二乘法拟合二元多次曲线     ///     ///已知点的x坐标集合     ///已知点的y坐标集合     ///已知点的个数     ///方程的最高次数     ...
3398 0
|
存储 C#
C#基础语法(数组和函数)
C#基础语法(数组和函数)
307 1
|
运维 编译器 C#
C# 9.0中的本地函数属性:深化函数级别的控制
【1月更文挑战第17天】C# 9.0引入了本地函数属性的概念,允许开发者在本地函数上应用属性,从而进一步细化对函数行为的控制。这一新特性不仅增强了代码的可读性和可维护性,还为函数级别的编程提供了更多的灵活性。本文将探讨C# 9.0中本地函数属性的用法、优势以及可能的应用场景,帮助读者更好地理解并应用这一新功能。
C#基础之Main函数
C#基础之Main函数
377 0
|
传感器 编解码 监控
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)
269 0
|
C#
C#中方法函数的声明和调用
C#中方法函数的声明和调用
314 0