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

C#实现int数组转二进制字符串数组遇索引越界异常求助

解决数组越界错误并实现文本转二进制编码

嘿,我来帮你搞定这个IndexOutOfRangeException的问题!咱们先揪出问题根源,再一步步修正代码。

错误原因分析

你代码里的核心bug出在foreach循环这一行:

foreach (int a in znaky)

znaky是char数组,当你用int接收遍历元素时,得到的其实是每个字符的ASCII码值,而不是数组索引。举个例子:如果znaky里存的是字符'5',那a的值会是53(这是字符'5'的ASCII码),你用znaky[a]就相当于去访问数组的第54个元素,但你的数组长度只有moje.Length,肯定远小于53,这不就直接越界报错了嘛!

另外还有个小细节:直接用binary += ...拼接字符串效率很低,因为C#里的string是不可变类型,每次拼接都会创建新的字符串对象,数据量大的时候会拖慢程序,推荐用StringBuilder来处理。

修正后的代码(实现文本转二进制字符串)

如果你的需求是把整个文本转换成一串连续的二进制编码,试试下面的代码:

// 简化数组复制步骤:如果moje是string类型,直接转成char数组就行
char[] znaky = moje.ToCharArray();
// 用StringBuilder高效拼接字符串
StringBuilder binaryBuilder = new StringBuilder();

foreach (char c in znaky)
{
    if (char.IsDigit(c))
    {
        // 如果是数字字符,先转成对应的整数(比如'3'转成3),再转二进制
        int digit = c - '0';
        binaryBuilder.Append(Convert.ToString(digit, 2));
    }
    else
    {
        // 如果是普通文本字符,转成对应的ASCII二进制(补前导零到8位,符合标准ASCII格式)
        int asciiValue = (int)c;
        binaryBuilder.Append(Convert.ToString(asciiValue, 2).PadLeft(8, '0'));
    }
}

// 最终得到拼接好的二进制字符串
string binary = binaryBuilder.ToString();

如果需要二进制数字数组(每个元素对应一个字符的二进制)

要是你想要的是一个存储每个字符二进制编码的数组(而不是拼接成一个大字符串),可以改成这样:

char[] znaky = moje.ToCharArray();
List<string> binaryList = new List<string>();

foreach (char c in znaky)
{
    string binaryStr;
    if (char.IsDigit(c))
    {
        int digit = c - '0';
        binaryStr = Convert.ToString(digit, 2);
    }
    else
    {
        int asciiValue = (int)c;
        binaryStr = Convert.ToString(asciiValue, 2).PadLeft(8, '0');
    }
    binaryList.Add(binaryStr);
}

// 转成string数组
string[] binary = binaryList.ToArray();

这样修改后,不仅解决了数组越界的问题,还优化了字符串拼接的效率,完全符合你把文本转换成二进制编码的需求~

内容的提问来源于stack exchange,提问作者Daniel Neuman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:36