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

本文关键字:是否 包含 字符串 数组 字节数 字节 检查 | 更新日期: 2023-09-27 17:54:41

是否有一种方法可以检查byte[]中的字节是否是有效的字符串,因此它是否只包含ASCII字符。

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

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

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

好吧,如果

仅包含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)) {
     ...
  }

直接回答您的问题:

是的。这不仅很容易,而且很琐碎:

Boolean isValidAscii(Byte[] bytes) {
  return true;
}

这很可能不是你想要的。

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

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

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

Boolean iFindThisAValidAsciiCharacter(Char c) {
  //your logic here
}
Boolean isValidAscii(Byte[] bytes) {
  return bytes.forAll((Byte b) => iFindThisAValidAscciCharacter( (char)b))
}

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

我建议你退一步,首先考虑一下为什么你想要"有效的ascii"。在这个国际化和unicode的勇敢新世界里,你所要做的事情不太可能实现你想要实现的目标。

首先,您可以使用此将字节数组转换为字符串

System.Text.Encoding.ASCII.GetString(BytesArray);

然后检查它是否有效。

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

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