You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中将二进制字符串转换为字节数组形式的二进制数据

解决二进制字符串转字节数组(按8位分组)的问题

我懂你的需求——从TextBox拿到的是一串纯0和1组成的二进制字符串,但直接转字节数组会把每个字符当成ASCII码('0'对应48,'1'对应49),这完全不是你想要的效果。我们需要把这串字符串每8位作为一组,转换成对应的字节,最终生成正确的字节数组。

核心实现思路

  1. 先校验输入合法性:确保字符串只包含0和1,且长度是8的倍数(如果不是,你可以选择补前导0、截断或者抛出错误,下面会给出可选处理方案)
  2. 按每8位分割原字符串
  3. 把每个8位的二进制子串转换成对应的字节
  4. 收集所有字节组成最终数组

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:24:08