我有以下十六进制字节数组:
Byte[] Bytes = { 0x02, 0x31, 0x20, 0x20, 0x20, 0x20, 0x32,
0x36, 0x38, 0x30, 0x34, 0x03, 0x0D };
然后我使用BitConverter
将其转换为字符串:
String value = BitConverter.ToString(Bytes);
此时,value
如下:
"02-31-20-20-20-20-32-36-38-30-34-03-0D"
现在,我需要消除从02
到最后一个20
以及从03
到0D
的值。换句话说,我需要通过消除其余部分来提取32-36-38-30-34
。
关键点在于,十六进制的0x02
代表“文本的开始”,0x20
代表空格,0x03
代表“文本结尾”。因此,我需要消除“文本开头”到最后一个空格以及“文本结尾”中的所有值,以获取它们之间的值。
答案 0 :(得分:0)
这是一个方法,它接收一个字符串,将其在换行字符串("0A"
)上分割以获取数据行,然后获取每一行并在第一个空格("20"
之后添加所有内容)到行字符串("03"
)的末尾,并返回以下字符串的列表:
public static List<string> GetData(string allData)
{
var newLine = "0A";
var space = "20-";
var endText = "-03";
var data = new List<string>();
if (string.IsNullOrWhiteSpace(allData)) return data;
var lines = allData.Split(new[] { newLine }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
var lastSpace = line.LastIndexOf(space);
if (lastSpace == -1) continue;
var endOfText = line.IndexOf(endText, lastSpace);
if (endOfText == -1) continue;
var start = lastSpace + space.Length;
var length = endOfText - start;
data.Add(line.Substring(start, length).Trim('-'));
}
return data;
}
在这里使用问题和注释中的样本数据来使用它。请注意,这假定已使用BitConverter
转换了一个字符串:
static void Main()
{
var questionSample = "02-31-20-20-20-20-32-36-38-30-34-03-0D";
var commentSample = "02-31-20-20-20-20-32-38-39-37-31-03-0D-0A-02-31-20-20-20-" +
"20-32-38-39-35-30-03-0D-0A-02-31-20-20-20-20-32-39-30-" +
"30-30-03-0D-0A-02-31-20-20-20-20-32-38-38-38-34-03-0D-0A";
Console.WriteLine(GetData(questionSample).FirstOrDefault());
Console.WriteLine(new string('-', Console.WindowWidth - 1));
foreach (var dataLine in GetData(commentSample))
{
Console.WriteLine(dataLine);
}
GetKeyFromUser("\nPress any key to exit...");
}
输出