2014-02-24 50 views
0

我有計算機和傳感器之間的串行通信。當我從傳感器請求數據時。傳感器將回復十六進制數字的兩部分。這就像「23 11」。第一部分是最重要的位,我必須將該值乘以256.第二部分是最低有效位,我不必將它乘以它。 所以,我想把這個角色分成23和11.並且把第一部分乘。但我不知道如何識別第一和第二部分。所以我只能乘以第一部分,然後總結它們。 我用這個代碼,以分割字符:如何讀取一些字符串字符並識別它?

string[] hexValuesSplit = hexValues.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries); 

回答

1

你是在正確的軌道上!從Split返回的數組的索引爲0時,MSB位於索引1,LSB位於索引1處。只需將這些數據轉換爲字節,即可。

var values = hexValues.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries); 
if (values.Length != 2) 
    throw new ArgumentException("Unexpected input format."); 

var msb = Convert.ToByte(values[0]); 
var lsb = Convert.ToByte(values[1]); 

var result = (msb * 256) + lsb; 
+0

非常感謝。這很好! – tzudin

0

如果您的數據只是,hexValues.Split()[0]會給你23。但是,如果你有更多的數據,你想跳過每個第二值,那麼試試這個:

var values = hexValues.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries) 
      .Where((x, index) => index != 1 && index % 2 == 0) 
      .Select(x => Convert.ToByte(x)) 
      .ToArray(); 

樣品inputoutput

// input : 23 14 11 25 73 18 29 19 
// output: 23 11 73 29