簡體   English   中英

檢查C#字節數組是否包含字符串

[英]Check if C# byte array contains a String

有沒有一種方法可以檢查byte []中的字節是否是有效的字符串,因此它是否僅包含ASCII字符。

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

我可以像上面的示例一樣使用但具有功能的東西。

好吧,如果

僅包含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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM