在C#中将二进制字符串转换为字节数组形式的二进制数据
解决二进制字符串转字节数组(按8位分组)的问题
我懂你的需求——从TextBox拿到的是一串纯0和1组成的二进制字符串,但直接转字节数组会把每个字符当成ASCII码('0'对应48,'1'对应49),这完全不是你想要的效果。我们需要把这串字符串每8位作为一组,转换成对应的字节,最终生成正确的字节数组。
核心实现思路
- 先校验输入合法性:确保字符串只包含0和1,且长度是8的倍数(如果不是,你可以选择补前导0、截断或者抛出错误,下面会给出可选处理方案)
- 按每8位分割原字符串
- 把每个8位的二进制子串转换成对应的字节
- 收集所有字节组成最终数组
C# 代码示例
假设你用的是WinForms/WPF的TextBox,以下是完整的可复用实现:
public static byte[] BinaryStringToByteArray(string binaryStr) { // 第一步:校验输入格式 if (string.IsNullOrEmpty(binaryStr) || binaryStr.Any(c => c != '0' && c != '1')) { throw new ArgumentException("输入不是有效的二进制字符串(只能包含0和1)"); } // 第二步:处理长度不是8倍数的情况 if (binaryStr.Length % 8 != 0) { // 方案1:补前导0至8的倍数(推荐,避免丢失有效位) int paddingCount = 8 - (binaryStr.Length % 8); binaryStr = binaryStr.PadLeft(binaryStr.Length + paddingCount, '0'); // 方案2:直接抛出异常(如果不允许补0) // throw new ArgumentException("二进制字符串长度必须是8的倍数"); } // 第三步:分组转换为字节数组 return Enumerable.Range(0, binaryStr.Length / 8) .Select(index => Convert.ToByte(binaryStr.Substring(index * 8, 8), 2)) .ToArray(); }
调用示例
从TextBox取文本后直接调用方法即可:
string inputBinary = yourTextBox.Text.Trim(); try { byte[] resultBytes = BinaryStringToByteArray(inputBinary); // 这里处理转换后的字节数组,比如保存到文件、传输等 } catch (ArgumentException ex) { MessageBox.Show($"转换失败:{ex.Message}"); }
关键细节说明
Convert.ToByte(subStr, 2):第二个参数2指定转换基数为二进制,这样就能把8位二进制字符串直接转成对应字节值,比如"01011111"会被转换成0x5F(十进制95),而不是每个字符的ASCII码。- 输入校验:提前过滤无效字符和长度问题,避免后续转换抛出意外错误。
内容的提问来源于stack exchange,提问作者Mazen Nawlo
相关产品推荐
相关产品推荐

