有沒有辦法檢查byte []中的字節是否爲有效字符串,因此如果它僅包含ASCII字符。檢查C#字節數組是否包含字符串
if (isValidASCII(myByteArray)) {
....
}
東西,我可以使用像上面的例子,但功能。
有沒有辦法檢查byte []中的字節是否爲有效字符串,因此如果它僅包含ASCII字符。檢查C#字節數組是否包含字符串
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)) {
...
}
首先,你可以使用這個
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這個勇敢的新世界裏,你想要做的就是完成你想要完成的任務。
string asciiString = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(BYTEVARIABLE));
現在檢查字符串是否有一些字符已被更改爲'?'如果是,它不僅僅是ASCII。
你如何定義一個有效的字符串?什麼是編碼應該是?你有什麼嘗試? – dotctor
你錯過了在你提供的代碼中關閉的一個閉合點 –
所有的字節數組都包含有效的字符串,因爲所有的字符串都是字節數組,但是有效並不意味着有意義,並且回答我們需要知道你認爲什麼有意義 – MikeT