-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathByteDataMaker.cs
127 lines (110 loc) · 2.42 KB
/
ByteDataMaker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class ByteDataMaker
{
public byte[] data = null;
public int pos = 0;
public ByteDataMaker()
{
Init(500);
}
public void Init(int MaxLength)
{
data = new byte[MaxLength];
pos = 0;
}
public void Add(int value)
{
Array.Copy(BitConverter.GetBytes(value), 0, data, pos, 4);
pos += 4;
}
public void Add(int[] valueArray)
{
int len = valueArray.Length;
Add(len);
for (int i = 0; i < len; i++)
Add(valueArray[i]);
}
public void Add(string value)
{
byte[] strdata = Encoding.UTF8.GetBytes(value);
byte len = (byte)strdata.Length;
//Array.Copy(BitConverter.GetBytes(len), 0, data, pos, 4);
data[pos] = len;
Array.Copy(strdata, 0, data, pos + 1, len);
pos += 1 + len;
}
public void Add(UInt64 value)
{
Array.Copy(BitConverter.GetBytes(value), 0, data, pos, 8);
pos += 8;
}
public void Add(byte[] value)
{
Array.Copy(value, 0, data, pos, value.Length);
pos += value.Length;
}
public void Add(byte value)
{
data[pos] = value;
pos += 1;
}
public byte[] GetBytes()
{
byte[] rData = new byte[pos];
Array.Copy(data, 0, rData, 0, pos);
return rData;
}
}
class ByteDataParser
{
public byte[] data = null;
public int pos;
public void Init(byte[] UseData)
{
data = UseData;
pos = 0;
}
public void SetPos(int _pos)
{
pos = _pos;
}
public int GetInt()
{
int v = BitConverter.ToInt32(data, pos);
pos += 4;
return v;
}
public int[] GetIntArray()
{
int len = GetInt();
int[] d = new int[len];
for (int i = 0; i < len; i++)
{
d[i] = GetInt();
}
return d;
}
public UInt64 GetUInt64()
{
UInt64 v = BitConverter.ToUInt64(data, pos);
pos += 8;
return v;
}
public byte GetByte()
{
byte v = data[pos];
pos += 1;
return v;
}
public string GetString()
{
//int len = BitConverter.ToInt32(data, pos);
int len = data[pos];
string str = Encoding.UTF8.GetString(data, pos + 1, len);
pos += 1 + len;
return str;
}
}