[C#]我自己写的一个对字节中每位进行修改值的函数
2017-09-01 09:47
429 查看
位操作方法
代码如下:
1. 设置字节中某位的值
测试案例:
把每位全为1的字节置0
结果如下:
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. 获得字节中某位的值
代码如下:
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; }
相关文章推荐
- [C#]我自己写的一个对字节中每位进行修改值的函数
- 对练习7进行修改,让它使用一个函数来返回计算值
- c#初学-delegate合并委托(多路广播委托)一个委托进行多个函数调用
- C# TripleDES NoPadding 时对待加密内容进行补字节(8个字节为一个Block)
- C#导出Excel的函数(可根据实际需要进行相应修改)
- 一个可以使得上传的图片大小按照指定的宽度,高度自动按比例进行缩放的函数(C#)
- javascript 中,哪些函数是对变量自身进行修改,哪些是创建一个新变量
- 定义一个教师类和学生类,在学生类中声明教师类的函数modify_stu()为友函数,方便教师对学生成绩进行修改
- 将一个字节数据进行高低位镜像对调的实现函数
- 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)
- 一个C#编写的snmp程序,可使网络管理人员进行参考、开发-A C# Prepared snmp procedures, will enable network managers to carry o
- asp.net常用的一个很好用的控制文件下载的函数 支持续传多线(控制多线请自行修改)
- 怎样在C#里对xml文件进行修改,新增,删除,插入操作?
- 一个c#的输入框函数
- C# 获取字符串长度(一个汉字算两个字节)
- 10、 java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
- 用CSocket基于UDP协议进行网络通信过程中OnReceive函数无法响应消息的一个原因
- C#对DataGridView中的数据进行添加、修改、删除操作
- 面试题---实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
- [转]一个 C# 字符串最终转化为多长的字节, 取决于使用的编码