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
相关产品推荐
相关产品推荐

