-
Notifications
You must be signed in to change notification settings - Fork 0
/
BitConverter.cs
145 lines (141 loc) · 4.99 KB
/
BitConverter.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using System;
namespace NetduinoPlusApplication1
{
public static class BitConverter
{
public static byte[] GetBytes(bool value)
{
return new byte[] { (value ? ((byte)1) : ((byte)0)) };
}
public static byte[] GetBytes(char value)
{
return new byte[2] { (byte)(value & 0xFF), (byte)((value >> 8) & 0xFF) };
}
public static byte[] GetBytes(short value)
{
return new byte[2] { (byte)(value & 0xFF), (byte)((value >> 8) & 0xFF) };
}
public static byte[] GetBytes(ushort value)
{
return new byte[2] { (byte)(value & 0xFF), (byte)((value >> 8) & 0xFF) };
}
public static byte[] GetBytes(int value)
{
return new byte[4] {
(byte)(value & 0xFF),
(byte)((value >> 8) & 0xFF),
(byte)((value >> 16) & 0xFF),
(byte)((value >> 24) & 0xFF) };
}
public static byte[] GetBytes(uint value)
{
return new byte[4] {
(byte)(value & 0xFF),
(byte)((value >> 8) & 0xFF),
(byte)((value >> 16) & 0xFF),
(byte)((value >> 24) & 0xFF) };
}
public static byte[] GetBytes(long value)
{
return new byte[8] {
(byte)(value & 0xFF),
(byte)((value >> 8) & 0xFF),
(byte)((value >> 16) & 0xFF),
(byte)((value >> 24) & 0xFF),
(byte)((value >> 32) & 0xFF),
(byte)((value >> 40) & 0xFF),
(byte)((value >> 48) & 0xFF),
(byte)((value >> 56) & 0xFF)};
}
public static byte[] GetBytes(ulong value)
{
return new byte[8] {
(byte)(value & 0xFF),
(byte)((value >> 8) & 0xFF),
(byte)((value >> 16) & 0xFF),
(byte)((value >> 24) & 0xFF),
(byte)((value >> 32) & 0xFF),
(byte)((value >> 40) & 0xFF),
(byte)((value >> 48) & 0xFF),
(byte)((value >> 56) & 0xFF)};
}
public static bool ToBoolean(byte[] value, int index = 0)
{
return value[index] != 0;
}
public static char ToChar(byte[] value, int index = 0)
{
return (char)(value[0 + index] << 0 | value[1 + index] << 8);
}
public static short ToInt16(byte[] value, int index = 0)
{
return (short)(
value[0 + index] << 0 |
value[1 + index] << 8);
}
public static int ToInt32(byte[] value, int index = 0)
{
return (
value[0 + index] << 0 |
value[1 + index] << 8 |
value[2 + index] << 16 |
value[3 + index] << 24);
}
public static long ToInt64(byte[] value, int index = 0)
{
return (
value[0 + index] << 0 |
value[1 + index] << 8 |
value[2 + index] << 16 |
value[3 + index] << 24 |
value[4 + index] << 32 |
value[5 + index] << 40 |
value[6 + index] << 48 |
value[7 + index] << 56);
}
public static ushort ToUInt16(byte[] value, int index = 0)
{
return (ushort)(
value[0 + index] << 0 |
value[1 + index] << 8);
}
public static uint ToUInt32(byte[] value, int index = 0)
{
return (uint)(
value[0 + index] << 0 |
value[1 + index] << 8 |
value[2 + index] << 16 |
value[3 + index] << 24);
}
public static ulong ToUInt64(byte[] value, int index = 0)
{
return (ulong)(
value[0 + index] << 0 |
value[1 + index] << 8 |
value[2 + index] << 16 |
value[3 + index] << 24 |
value[4 + index] << 32 |
value[5 + index] << 40 |
value[6 + index] << 48 |
value[7 + index] << 56);
}
public static string ToString(byte[] value, int index = 0)
{
return ToString(value, index, value.Length - index);
}
public static string ToString(byte[] value, int index, int length)
{
char[] c = new char[length * 3];
byte b;
for (int y = 0, x = 0; y < length; ++y, ++x)
{
b = (byte)(value[index + y] >> 4);
c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
b = (byte)(value[index + y] & 0xF);
c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30);
c[++x] = '-';
}
return new string(c, 0, c.Length - 1);
}
}
}