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

C#中如何使用GetString()方法将字节数组指定元素解码为字符串

字节数组分段转字符串的简化实现

你当前的实现存在冗余操作,可以按以下思路优化,大幅简化代码:

  • 去掉不必要的全数组复制:Encoding.GetString本身不会修改传入的原始字节数组,只要你不需要改动派生类中msg的内容,完全可以直接基于原数组解码,不需要额外声明mainClassArray做Array.Copy操作。
  • 提取重复解码的固定片段:你需要的两个解码结果(前4字节、后4字节)是固定值,不需要重复调用6次GetString,只需要解码1次存为变量复用即可。
  • 用循环替代逐行硬编码赋值:你的目标数组是按「前4字节解码结果、后4字节解码结果」的顺序重复3次,用循环填充即可,不需要逐行写6条赋值语句。

优化后代码示例

// 派生类原始字节数组
byte[] msg = new byte[8] { 0x01, 0x08, 0x1A, 0x0B, 0xFF, 0x03, 0x31, 0x2C };

// 仅需解码2次,复用结果
string firstPart = ASCIIEncoding.ASCII.GetString(msg, 0, 4);
string secondPart = ASCIIEncoding.ASCII.GetString(msg, 4, 4);

// 循环填充目标数组
string[] ArrayToStr = new string[6];
for (int i = 0; i < 6; i += 2)
{
    ArrayToStr[i] = firstPart;
    ArrayToStr[i + 1] = secondPart;
}

额外注意事项

  • 你给出的测试字节中包含0xFF,该值不在标准ASCII的0-127取值范围内,用ASCII解码会被替换为?。如果你需要保留0-255全范围字节的对应字符,应该换用ISO-8859-1(Latin-1)编码,写法为Encoding.GetEncoding("ISO-8859-1"),可以无损失映射单字节值到Unicode字符。
  • 如果追求更高性能、减少额外内存分配,可以用Span<byte>做字节切片,不需要复制数组内存:
Span<byte> msgSpan = msg.AsSpan();
string firstPart = ASCIIEncoding.ASCII.GetString(msgSpan.Slice(0, 4));
string secondPart = ASCIIEncoding.ASCII.GetString(msgSpan.Slice(4, 4));
  • 如果后续分段规则变化,只需要调整循环内的切片逻辑和预解码片段即可,维护成本远低于逐行硬编码的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:39:16