2016-07-05 585 views
-2

有沒有辦法檢查byte []中的字節是否爲有效字符串,因此如果它僅包含ASCII字符。檢查C#字節數組是否包含字符串

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

東西,我可以使用像上面的例子,但功能。

+3

你如何定義一個有效的字符串?什麼是編碼應該是?你有什麼嘗試? – dotctor

+0

你錯過了在你提供的代碼中關閉的一個閉合點 –

+0

所有的字節數組都包含有效的字符串,因爲所有的字符串都是字節數組,但是有效並不意味着有意義,並且回答我們需要知道你認爲什麼有意義 – MikeT

回答

2

那麼,如果

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

首先,你可以使用這個

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

然後檢查它是否有效與否的字節數組轉換成字符串。

1

直接回答你的問題:

是的。它不僅非常簡單,而且很簡單:

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這個勇敢的新世界裏,你想要做的就是完成你想要完成的任務。

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

現在檢查字符串是否有一些字符已被更改爲'?'如果是,它不僅僅是ASCII。

相關問題