检查C#字节数组是否包含String

时间:2016-07-05 08:54:57

标签: c# string byte bytearray

有没有办法检查byte []中的字节是否是有效字符串,所以如果它只包含ASCII字符。

if (isValidASCII(myByteArray)) {
....
}

我可以像上面的例子一样使用但有功能的东西。

4 个答案:

答案 0 :(得分:3)

好吧,如果

  

仅包含ASCII字符

表示代码在[32..127]内的符号(对应字符为[' '..'~']) - 标准ASCII表字符,不包括命令:

Boolean isAscii = myByteArray.All(b => b >= 32 && b <= 127)

但是,有效字符串被定义为

 "$d|1 ?;)y" // this is a valid ASCII characters based string

或类似的。如果你想将这个简单的 Linq 包装成一个方法:

  public static bool isValidASCII(IEnumerable<byte> source) {
    if (null == source)
      return true; // or false, or throw exception

    return source.All(b => b >= 32 && b <= 127);
  }

  ...

  if (isValidASCII(myByteArray)) {
     ...
  }

答案 1 :(得分:1)

直接回答你的问题:

是。它不仅非常简单,而且非常简单:

Boolean iFindThisAValidAsciiCharacter(Char c) {
  //your logic here
}

Boolean isValidAscii(Byte[] bytes) {
  return bytes.forAll((Byte b) => iFindThisAValidAscciCharacter( (char)b))
}

这很可能不是你想要的。

ASCII是一个将每个字节映射到一个字符的表。根据定义,每个字节代表一个有效的ASCII字符。

所以问题是,你在寻找什么?您认为什么是有效的ASCII字符。

一旦你定义了它,就很容易编码:

{{1}}

当然,诀窍在于你对你认为有效的定义。

我建议你退后一步,并考虑为什么你想要“有效的ascii”。在这个勇敢的国际化和unicode新世界中,你想要做的事情听起来不太可能实现你想要实现的目标。

答案 2 :(得分:0)

首先,您可以使用此

将您的bytes数组转换为字符串
System.Text.Encoding.ASCII.GetString(BytesArray);

然后检查它是否有效。

答案 3 :(得分:-1)

string asciiString = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(BYTEVARIABLE));

现在检查字符串是否有一些已更改为“?”的字符如果是的话,它不仅仅是ASCII。