【问题标题】:How to read some string character and identify it?如何读取一些字符串字符并识别它?
【发布时间】:2014-03-25 11:42:00
【问题描述】:
我在计算机和传感器之间进行串行通信。当我从传感器请求数据时。传感器将回复两部分的十六进制数。这就像“23 11”。第一部分是最高有效位,我必须将该值乘以 256。第二部分是最低有效位,我不必乘以它。
所以,我想将该字符分成 23 和 11。然后将第一部分相乘。但我不知道如何识别第一部分和第二部分。所以我只能将第一部分相乘,然后将它们相加。
我用这段代码来分割字符:
string[] hexValuesSplit = hexValues.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries);
【问题讨论】:
标签:
c#
string
split
char
hex
【解决方案1】:
你在正确的轨道上!从 Split 返回的数组将在索引 0 处具有 MSB,在索引 1 处具有 LSB。您只需将它们转换为字节即可。
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;
【解决方案2】:
如果您的数据只是23 11,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();
示例input 和output:
// input : 23 14 11 25 73 18 29 19
// output: 23 11 73 29