byte[] 转 2进制字符串

博客展示了byte[]与二进制字符串的相互转换代码。先将byte[]转为二进制字符串,通过循环和字符串处理实现;再把二进制字符串转回byte[],利用循环和转换函数完成。代码示例清晰呈现转换过程。

/byte[]转为二进制字符串表示
byte[] bytesTest =new byte[]{16,18,33};

string strResult=string.Empty;
string strTemp;
for(int i=0;i<bytesTest.Length;i++)
{
strTemp=System.Convert.ToString(bytesTest[i], 2);
strTemp =strTemp.Insert(0,new string('0',8-strTemp.Length));

strResult+=strTemp;
}
//二进制字符串转化为byte[]
byte[] bytesTest1 =new byte[strResult.Length/8];
for(int i=0;i<bytesTest1.Length;i++)
bytesTest1[i] =Convert.ToByte(strResult.Substring(i*8,8),2);

转载于:https://www.cnblogs.com/z45281625/p/10893927.html

在 C# 中,将字节数组(`byte[]`)换为十六进制字符串(hex string)是一个常见的需求,尤其是在处理加密、网络传输或文件操作时。可以通过多种方式实现这一换,以下是一些常用的方法,并附有代码示例。 ### 使用 `BitConverter` 类进行换 ```csharp byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; string hexString = BitConverter.ToString(data).Replace("-", ""); ``` 此方法会将字节数组换为形如 `123456789ABC` 的字符串。`BitConverter.ToString` 会在每个字节之间插入连字符 `-`,因此需要调用 `Replace("-", "")` 来移除这些连字符[^1]。 ### 使用 `StringBuilder` 和 `Convert.ToString` ```csharp public string ByteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.Length * 2); foreach (byte b in data) { sb.Append(b.ToString("X2")); } return sb.ToString(); } ``` 该方法通过遍历字节数组,将每个字节换为两位的十六进制字符串,并使用 `StringBuilder` 来构建最终结果。`"X2"` 格式化字符串表示使用大写的十六进制数字,并确保每个字节始终输出两位数[^1]。 ### 使用 LINQ 简化代码 ```csharp byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; string hexString = string.Concat(data.Select(b => b.ToString("X2"))); ``` 此方法使用 LINQ 查询表达式,将每个字节换为十六进制字符串,并通过 `string.Concat` 将所有字符串连接起来,形成最终的十六进制字符串。这种方法代码简洁,可读性强[^1]。 ### 使用 `SoapHexBinary` 类(适用于 XML 相关操作) ```csharp using System.Runtime.Remoting.Metadata.W3cXsd2001; byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; SoapHexBinary shb = new SoapHexBinary(data); string hexString = shb.ToString(); ``` 如果需要在 XML 中使用十六进制字符串,可以使用 `SoapHexBinary` 类,它提供了一个标准的方式来处理字节数组与十六进制字符串之间的换。 ### 性能优化建议 对于大规模数据处理,建议使用 `StringBuilder` 或 `Span<T>` 相关方法,以减少内存分配和提高执行效率。例如,可以使用 `stackalloc` 来在栈上分配缓冲区,适用于小规模数据的快速处理: ```csharp public unsafe string FastByteArrayToHexString(byte[] data) { char[] hexChars = "0123456789ABCDEF".ToCharArray(); int length = data.Length; char* result = stackalloc char[length * 2]; for (int i = 0; i < length; i++) { byte b = data[i]; result[i * 2] = hexChars[(b >> 4) & 0xF]; result[i * 2 + 1] = hexChars[b & 0xF]; } return new string(result, 0, length * 2); } ``` 此方法通过直接操作指针和字符数组,避免了频繁的字符串拼接操作,从而提升了性能。但需要注意,此方法使用了 `unsafe` 代码,需在项目设置中启用不安全代码编译[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值