C# | [二进制字符串] 与 [字节数组] 互相转换,一行代码就搞定! - CodePlus系列

简介: 开发中有时需要将二进制数据转换为字符串或相反。虽然.NET提供了一些用于二进制数据操作的类库,但是它们的使用有时候会比较繁琐。STTech.CodePlus是一个.NET扩展库,它提供了很多实用的扩展方法,可以帮助我们更方便地进行二进制数据操作。在本文中,我们将介绍如何使用STTech.CodePlus扩展库实现二进制字符串和字节数组的快速互相转换。

image.png

C#二进制字符串与字节数组互相转换

@[toc]

前言

开发中有时需要将二进制数据转换为字符串或相反。虽然.NET提供了一些用于二进制数据操作的类库,但是它们的使用有时候会比较繁琐。STTech.CodePlus是一个.NET扩展库,它提供了很多实用的扩展方法,可以帮助我们更方便地进行二进制数据操作。
在本文中,我们将介绍如何使用STTech.CodePlus扩展库实现二进制字符串和字节数组的快速互相转换。

示例代码

// 用于测试的字节数组
byte[] bytes = new byte[] {
   
    0x01, 0x11, 0x21, 0xF2, 0xF3, 0xAA, 0xAB, 0xAC, 0xAD, };

// 将字节数组转换为二进制字符串
string binaryString = bytes.Select(b => Convert.ToString(b, 2).PadLeft(8,'0')).Join();

// 将二进制字符串还原为字节数组
byte[] bytes2 = binaryString.Slice(8).Select(arr=> Convert.ToByte(arr, 2)).ToArray();

// 输出转换结果
Console.WriteLine($"{binaryString}\r\n{bytes2.ToHexCodeString()}\r\n{bytes2.ToHexString()}");

执行结果如下图:

image.png

实现思路

我们首先定义了一个字节数组bytes,然后通过LINQ表达式将其转换为一个二进制字符串binaryString。这里我们使用了Select扩展方法和Convert.ToString方法将每个字节转换为8位的二进制字符串,并使用PadLeft方法在左侧填充0,使得每个二进制字符串的长度都是8位。接着,我们使用Join扩展方法将所有二进制字符串连接成一个字符串。这里我们没有指定分隔符,因此默认使用空字符串。

接下来,我们使用Slice扩展方法将二进制字符串按照等尺寸(这里是8位)进行分片,然后使用Select和Convert.ToByte方法将每个二进制字符串转换为一个字节,最后使用ToArray方法将所有字节组成一个新的字节数组 bytes2。最后,我们使用ToHexCodeString和ToHexString扩展方法将字节数组 bytes2 转换为16进制代码格式的字符串和16进制格式的字符串,并输出转换结果。

扩展方法说明

在上述示例代码中,我们使用了STTech.CodePlus扩展库中的四个扩展方法:

  • Slice方法用于将字符串等分为指定大小的子串,并返回一个字符串列表;
  • Join方法用于将字符串列表中的所有字符串连接成一个新的字符串,可以指定分隔符;
  • ToHexCodeString方法用于将字节数组转换为16进制代码格式的字符串;
  • ToHexString方法用于将字节数组转换为16进制格式的字符串。

引用CodePlus库

想要使用STTech.CodePlus扩展库,可以通过Nuget搜索STTech.CodePlus并安装。

结束语

STTech.CodePlus扩展库提供了一些实用的扩展方法,可以帮助我们更方便地进行二进制数据操作。如果在开发中需要进行二进制数据的转换操作,不妨尝试使用STTech.CodePlus扩展库,相信会为您的开发工作带来很大的便利。
最后,如果您觉得本文对您有所帮助,请不要吝啬您的点赞和评论,提供宝贵的反馈和建议,让更多的读者受益。

相关文章
|
8天前
|
C#
C#的小例子和字符串(一)
C#的小例子和字符串(一)
26 0
|
2月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
22天前
|
C#
C#有关字符串的分割,替换,截取
C#有关字符串的分割,替换,截取
|
4月前
|
C# 开发者
C# 10.0引入常量插值字符串:编译时确定性的新篇章
【1月更文挑战第22天】在C# 10.0中,微软为开发者带来了一项引人注目的新特性——常量插值字符串。这一功能允许在编译时处理和计算字符串插值表达式,从而得到可以在编译时确定的常量字符串。本文将深入探讨C# 10.0中常量插值字符串的概念、工作原理、使用场景及其对现有字符串处理方式的改进,旨在帮助读者更好地理解和应用这一强大的新特性。
|
4月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
4月前
|
编译器 C# 开发者
C# 10.0中插值字符串的改进:灵活性与性能的双重提升
【1月更文挑战第19天】C# 10.0带来了对插值字符串的显著改进,进一步增强了这一功能的灵活性和性能。插值字符串是C#中处理字符串格式化的一种强大方式,它允许开发者直接在字符串中嵌入变量和表达式。在C# 10.0中,插值字符串不仅获得了语法上的简化,还通过新的编译时优化提高了运行时性能。本文将详细探讨C# 10.0中插值字符串的改进内容,以及这些改进如何为开发者带来更加高效和便捷的编程体验。
|
4月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
8天前
|
C#
C#字符串
C#字符串
15 0
|
2月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
37 1
|
3月前
|
数据采集 JSON 前端开发
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。