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

检查C#字节数组是否包含字符串,c#,string,byte,bytearray,C#,String,Byte,Bytearray,是否有方法检查byte[]中的字节是否为有效字符串,以及它是否仅包含ASCII字符 if (isValidASCII(myByteArray)) { .... } 我可以像上面的例子一样使用,但功能性很强。好吧,如果 仅包含ASCII字符 表示代码在[32..127]范围内的符号(对应字符为[''..'~'])-标准ASCII表格字符,不包括命令字符: Boolean isAscii = myByteArray.All(b => b >= 32 && b <=

是否有方法检查byte[]中的字节是否为有效字符串,以及它是否仅包含ASCII字符

if (isValidASCII(myByteArray)) {
....
}
我可以像上面的例子一样使用,但功能性很强。

好吧,如果

仅包含ASCII字符

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

Boolean isAscii = myByteArray.All(b => b >= 32 && b <= 127)
或者类似的。如果要将此简单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)) {
     ...
  }
公共静态bool isValidASCII(IEnumerable源代码){
if(null==源)
返回true;//或false,或引发异常
返回source.All(b=>b>=32&&bWell,如果

仅包含ASCII字符

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

Boolean isAscii = myByteArray.All(b => b >= 32 && b <= 127)
或者类似。如果要将此简单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)) {
     ...
  }
公共静态bool isValidASCII(IEnumerable源代码){
if(null==源)
返回true;//或false,或引发异常

返回source.All(b=>b>=32&&b首先,您可以使用以下命令将字节数组转换为字符串

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

然后检查它是否有效。

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

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

然后检查它是否有效。

逐字回答您的问题:

是的,这不仅很简单,而且很琐碎:

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的新世界里,你想做的事情很难完成你想完成的事情。

< P>从字面上回答你的问题:

string asciiString = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(BYTEVARIABLE));
是的,这不仅很简单,而且很琐碎:

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的新世界里,你想做的事情很难完成你想要完成的事情。
string asciiString = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(BYTEVARIABLE));
现在检查字符串中是否有已更改为“?”的字符,如果是,则它不仅仅是ASCII字符


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

如何定义有效字符串?编码应该是什么?您尝试了什么?您在提供的代码中缺少一个关闭制动器所有字节数组都包含有效字符串,因为所有字符串都是字节数组,但有效并不意味着n有意义的,为了回答这个问题,我们需要知道你认为什么是有意义的,你可能没有尝试做任何有用的事情。如果我不得不冒险猜测,你看到的是一个
字节[]
以非ascii编码表示文本,如果你期望一些“有效”的话,可能是UTF-8字符。要做一些有用的事情,你需要弄清楚文本是如何编码的,并使用正确的解码器将字符串取出来。你现在所走的路径只会导致痛苦。你如何定义有效字符串?编码应该是什么?你尝试了什么?你在提供的codeAll字节数组中缺少一个关闭制动器包含有效字符串,因为所有字符串都是字节数组,但是有效并不意味着有意义,为了回答这个问题,我们需要知道您将什么归类为有意义的,您可能没有尝试做任何有用的事情。如果我不得不大胆猜测,您将看到一个
Byte[]
以非ascii编码表示文本,如果您希望某些“有效”,则可能是UTF-8字符。要做一些有用的事情,您需要弄清楚文本是如何编码的,并使用适当的解码器将字符串取出来。您现在采用的路径只会导致痛苦。此函数将用大于127的值替换字节,用“?”替换字节。此函数将用大于127的值替换字节,用“?”