C# BitArray(点矩阵)转换成int和string的方法实现
作者:涛神-DevExpress资深开发者 时间:2023-06-18 07:33:44
BitArray的基础可以看菜鸟编程
BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。
当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。
BitArray 类的方法和属性
下表列出了 BitArray 类的一些常用的 属性:
属性 | 描述 |
---|---|
Count | 获取 BitArray 中包含的元素个数。 |
IsReadOnly | 获取一个值,表示 BitArray 是否只读。 |
Item | 获取或设置 BitArray 中指定位置的位的值。 |
Length | 获取或设置 BitArray 中的元素个数。 |
下表列出了 BitArray 类的一些常用的 方法:
序号 | 方法名 & 描述 |
---|---|
1 | public BitArray And( BitArray value ); 对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位与操作。 |
2 | public bool Get( int index ); 获取 BitArray 中指定位置的位的值。 |
3 | public BitArray Not(); 把当前的 BitArray 中的位值反转,以便设置为 true 的元素变为 false,设置为 false 的元素变为 true。 |
4 | public BitArray Or( BitArray value ); 对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位或操作。 |
5 | public void Set( int index, bool value ); 把 BitArray 中指定位置的位设置为指定的值。 |
6 | public void SetAll( bool value ); 把 BitArray 中的所有位设置为指定的值。 |
7 | public BitArray Xor( BitArray value ); 对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位异或操作。 |
了解了BitArray的大概,我们来做BitArray和Int和string的转换,
BitArray转成Int方法
/// <summary>
/// 点矩阵转成int
/// </summary>
public static int BitArrayToInt(BitArray bit)
{
int[] res = new int[1];
for (int i = 0; i < bit.Count; i++)
{
bit.CopyTo(res, 0);
}
return res[0];
}
BitArray转成string方法(如果有乱码,请自行修改编码)
/// <summary>
/// 点矩阵转换成string
/// </summary>
public static string BitArrayToStr(BitArray ba)
{
byte[] strArr = new byte[ba.Length / 8];
for (int i = 0; i < ba.Length / 8; i++)
{
for (int index = i * 8, m = 1; index < i * 8 + 8; index++, m *= 2)
{
strArr[i] += ba.Get(index) ? (byte)m : (byte)0;
}
}
return Encoding.Default.GetString(strArr);
}
在LinqPad上调用测试(Dump是LinqPad的输出的方法):
void Main()
{
var bi = new BitArray(new bool[] { true, false, false, false, false, true, false, false });
bool[] bs = bi.Cast<bool>().ToArray();//直接转成bool数组,但这个结果无意义
BitArrayToInt(bi).Dump("点矩阵转成int:");//点矩阵转成int
BitArrayToStr(bi).Dump("点矩阵转成字符串:");//点矩阵转成字符串
//测试将字符串转成点矩阵再转回字符串
var str = "涛神";
//点矩阵只支持bool[]、byte[]、int[],所以字符串需要先转成byte[]
byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
var ba = new BitArray(byteArray);//创建一个点矩阵
BitArrayToStr(ba).Dump("将点矩阵转成字符串:");//将点矩阵转成字符串
}
结果:
来源:https://blog.csdn.net/u012097590/article/details/120298978
标签:C#,BitArray,int,string
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Flutter 容器盒子模型的使用示例
2023-06-18 18:47:43
![](https://img.aspxhome.com/file/2023/4/85974_0s.png)
java.net.SocketException: Connection reset 解决方法
2023-06-17 01:28:43
![](https://img.aspxhome.com/file/2023/6/57416_0s.png)
C++实现LeetCode(159.最多有两个不同字符的最长子串)
2023-06-20 22:39:46
Java springboot yaml语法注解
2023-06-17 08:13:35
java使double保留两位小数的多方法 java保留两位小数
2023-06-17 14:01:30
Unity打开淘宝app并跳转到商品页面功能的实现方法
2023-06-17 01:05:18
![](https://img.aspxhome.com/file/2023/5/56135_0s.png)
JSON.toJSONString()空字段不忽略修改的问题
2023-06-16 03:12:37
Flutter 使用fluro的转场动画进行页面切换
2023-06-17 11:49:26
![](https://img.aspxhome.com/file/2023/4/94964_0s.gif)
Java 异步编程实践_动力节点Java学院整理
2023-06-18 17:04:12
Java内存模型详解
2023-06-21 21:04:29
![](https://img.aspxhome.com/file/2023/2/57592_0s.webp)
spring boot整合log4j2及MQ消费处理系统日志示例
2023-06-17 17:47:54
Flutter 通过Clipper实现各种自定义形状的示例代码
2023-06-19 14:25:11
![](https://img.aspxhome.com/file/2023/7/59397_0s.jpg)
C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)
2023-06-22 07:32:31
SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取
2023-06-21 19:16:23
![](https://img.aspxhome.com/file/2023/4/57494_0s.png)
Spring MVC 关于controller的字符编码问题
2023-06-17 09:52:52
使用Flutter实现一个走马灯布局的示例代码
2023-06-19 03:50:03
![](https://img.aspxhome.com/file/2023/4/84714_0s.gif)
Java中的interrupted()和isInterrupted()
2023-06-17 22:16:31
![](https://img.aspxhome.com/file/2023/6/57596_0s.png)
Spring源码解析之编程式事务
2023-06-20 19:17:49
![](https://img.aspxhome.com/file/2023/2/57402_0s.png)
探讨:将两个链表非降序合并为一个链表并依然有序的实现方法
2023-06-23 01:41:38
详解Spring Boot Admin监控服务上下线邮件通知
2023-06-16 21:53:31