我在计算机和传感器之间进行串行通信。当我从传感器请求数据时。传感器将回复两部分十六进制数。就像“23 11”。第一部分是最高有效位,我必须将该值乘以256.第二部分是最低有效位,我不必将它乘以它。 所以,我想把那个角色分成23和11.然后乘以第一部分。但我不知道如何识别第一部分和第二部分。所以我只能将第一部分相乘,然后求它们。 我使用此代码分割字符:
string[] hexValuesSplit = hexValues.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries);
答案 0 :(得分: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;
答案 1 :(得分:0)
如果您的数据只是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