【问题标题】:What is the character that represents a null byte after ASCIIEncoding.GetString(byte[])?在 ASCIIEncoding.GetString(byte[]) 之后代表空字节的字符是什么?
【发布时间】:2010-03-15 18:57:34
【问题描述】:

我有一个字节数组,它的末尾可能有也可能没有空字节。将其转换为字符串后,最后有一堆空格。我尝试使用 Trim() 来摆脱它,但它不起作用。转换字节数组后如何去掉字符串末尾的所有空格?

我写的是 C#。

【问题讨论】:

  • 字节数组中的值是什么?您确定字节数组包含 ASCII 字符串而不是 Unicode 或 UTF-8?

标签: c# .net string bytearray


【解决方案1】:

Trim() 在您的情况下不起作用,因为它只删除空格、制表符和换行符 AFAIK。它不会删除 '\0' 字符。你也可以使用这样的东西:

字节[] bts = ...;

字符串结果 = Encoding.ASCII.GetString(bts).TrimEnd('\0');

【讨论】:

  • 对我来说可能不是最有效的(有 20k 个“0”),但它起到了一种魅力。谢谢
【解决方案2】:
public string TrimNulls(byte[] data)
{
    int rOffset = data.Length - 1;

    for(int i = data.Length - 1; i >= 0; i--)
    {
        rOffset = i;

        if(data[i] != (byte)0) break;            
    }

    return System.Text.Encoding.ASCII.GetString(data, 0, rOffset + 1);
}

为了全面披露,我想非常清楚,这对 ASCII 可靠工作。对于任何多字节编码,这都会使床变得糟糕。

【讨论】:

  • 请补充一点,您的解决方案非常适合 ASCII 编码(按照 OP 的要求),但对于其他任何事情都会非常糟糕。
  • 那行得通。谢谢。我希望能够对生成的字符串执行诸如 Trim 之类的操作,但我想不会。谢谢!
  • 此解决方案的小错误。返回值应该是:return System.Text.Encoding.ASCII.GetString(data, 0, rOffset+1);否则会截断最后一个字节。
  • @Brian:我已经在几分钟前添加了,但是谢谢 ;)
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多