2012-02-02 111 views
-1

好吧,我知道這已經打不死的,但我不能縫讓所有的人對谷歌在這裏或任何地方工作字符串byte []數組

我有一個字符串,它看起來像這樣

1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

我存儲該字符串

每個數位具有從0到254的範圍內並且該字符串是幾乎隨機 我需要將其轉換爲一個字節數組,因爲硬件 變化 此的是什麼硬件是廁所對於

hardware.command(DeviceID, byte[]); 

王我做這個

hardware.command(1, new byte[] { 0, 0, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38 }); 

測試的硬件,一切都很好

各部分的硬件 PWM輸出百分比此更新每4ms所以它必須有點快

+1

如果您使用的.Net你必須添加一些 '實時' 設置,或多媒體選項,如果你需要一個嚴格的4ms反應時間。 – CodingBarfield 2012-02-02 07:49:41

+0

如果您需要快速運行,請考慮使用字節流而不是字符串。我的意思是嘗試使用緩衝區以字節數組形式獲取輸入。 – 2012-02-02 07:56:09

回答

1

嘗試這樣:

string datastring = "1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0"; 
byte[] data = datastring.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => byte.Parse(s)).ToArray(); 

,或者不LINQ:

var datastring = "1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0"; 
    var tokens = datastring.Split(','); 
    byte[] data = new byte[tokens.Length]; 
    for (int i = 0; i < tokens.Length; i++) { 
     data[i] = byte.Parse(tokens[i]); 
    } 
+0

'System.Array'沒有包含'Select'的定義,也沒有找到接受'System.Array'類型的第一個參數的擴展方法'Select' – TechMasterJoe 2012-02-02 07:58:42

+0

好的,你正在使用哪個框架版本?更新我的答案,包括沒有Linq的方法。 – Botz3000 2012-02-02 08:03:27

+0

@TechMasterJoe:這意味着你缺少對LINQ程序集的引用。 – Heinzi 2012-02-02 08:03:58

2

我不知道這是否滿足您的性能要求,但最簡單的方法是使用LINQ:

var myByteArray = (from s in myString.Split(',') select byte.Parse(s)).ToArray(); 

編輯:我原本寫了byte.Parse(s.Trim()),但Byte.Parse並不在乎周圍的空白。

+0

除了現在你得到的映射'「1」=> 1',而「1」=> 38'被請求(不知道可能是什麼樣的編碼......)。 – 2012-02-02 07:46:19

+0

這是很簡單的分隔符分割 – IamStalker 2012-02-02 07:47:59

+0

@Konrad字符串以1,1,1,1開頭,映射不像你寫的。字節數組以0,0開頭 – Reniuz 2012-02-02 07:48:36

1
String[] substringArray = String.Split(','); 
List<Bytes> listOfBytes = new List<Bytes>(); 
foreach(String substring in substringArray) 
{ 
    substring = substring.Trim(); 
    listOfBytes.Add(Byte.Parse(substring)); 
} 
Byte [] byteTable = listOfBytes.ToArray(); 
+2

這將忽略格式錯誤的輸入(TryParse返回false)而不是拋出異常。因此,錯誤的數據可能被髮送到硬件設備。 – Heinzi 2012-02-02 08:03:30

+0

@ Heinzi - 是的,你有權利,我沒有想過。我已經在我的帖子中修復了代碼。謝謝。 – Thaven 2012-02-02 09:51:06