// 16진수 문자열형태를 16진수 바이트형태로 저장...
string str = "4D 42 43 52 47 30 30 36 30 30 39";
byte[] test = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
// ======== 바이트 분리 ====================
//MBCR
char[] splitId = { 'M', 'B', 'C', 'R' };
List<byte[]> result = new List<byte[]>();
int start = 0;
for (int i = 0; i < test.Length; i++)
{
if ((test[i] == splitId[0] && test[i+1] == splitId[1] && test[i + 2] == splitId[2] && test[i + 3] == splitId[3]) && i != 0)
{
//Console.WriteLine(start);
byte[] _in = new byte[i - start];
Array.Copy(test, start, _in, 0, i - start);
result.Add(_in);
start = i; // 여기에 splitId 갯수만큼 더하면 제외되어 분리된다.
}
else if ((test[i] == splitId[0] && test[i + 1] == splitId[1] && test[i + 2] == splitId[2] && test[i + 3] == splitId[3]) && i == 0)
{
start = i; // 여기에 splitId 갯수만큼 더하면 제외되어 분리된다.
}
else if (test.Length - 1 == i && i != start)
{
//Console.WriteLine(start);
byte[] _in = new byte[i - start + 1];
Array.Copy(test, start, _in, 0, i - start + 1);
result.Add(_in);
}
}
Console.WriteLine(result.Count);
// DisplayArrayValues(test, "test ", test.Length);
foreach(byte[] data in result)
{
DisplayArrayValues(data, "test1", data.Length);
}
public static void DisplayArrayValues(Array arr, string name, int len)
{
// Get the length of one element in the array.
int elementLength = Buffer.ByteLength(arr) / arr.Length;
string formatString = String.Format(" {{0:X{0}}}", 2 * elementLength);
Console.Write("{0}({1}) :", name, len);
for (int ctr = 0; ctr < len; ctr++)
Console.Write(formatString, arr.GetValue(ctr));
Console.WriteLine();
}
https://www.codeproject.com/Questions/500127/Howplustoplussplitplusbyteplusarray
'SW > C#' 카테고리의 다른 글
메소드 가변 파라메터 params (0) | 2022.02.05 |
---|---|
날짜, 시간 비교 처리 DateTime.Compare (0) | 2020.08.11 |
바이트 byte 버퍼 저장.. 통신 처리에서 사용. (0) | 2020.08.10 |
Timer Task 타이머 타스크 (0) | 2020.07.28 |
string byte copy 스트링 바이트 복사 Array.Copy 조합, combine (0) | 2020.07.27 |