@@ -11,6 +11,8 @@ type ByteOrder interface {
11
11
Uint16([]byte) uint16
12
12
Uint32([]byte) uint32
13
13
Uint64([]byte) uint64
14
+ Uint128([]byte) uint128
15
+ Uint256([]byte) uint256
14
16
PutUint16([]byte, uint16)
15
17
PutUint32([]byte, uint32)
16
18
PutUint64([]byte, uint64)
@@ -79,6 +81,63 @@ func (le littleEndian) Uint64(b []byte) uint64 {
79
81
return ret
80
82
}
81
83
84
+ func (le littleEndian) Uint128(b []byte) uint128 {
85
+ ret := uint128(b[0])
86
+ ret = ret | uint128(b[1])<<uint128(8)
87
+ ret = ret | uint128(b[2])<<uint128(16)
88
+ ret = ret | uint128(b[3])<<uint128(24)
89
+ ret = ret | uint128(b[4])<<uint128(32)
90
+ ret = ret | uint128(b[5])<<uint128(40)
91
+ ret = ret | uint128(b[6])<<uint128(48)
92
+ ret = ret | uint128(b[7])<<uint128(56)
93
+ ret = ret | uint128(b[8])<<uint128(64)
94
+ ret = ret | uint128(b[9])<<uint128(72)
95
+ ret = ret | uint128(b[10])<<uint128(80)
96
+ ret = ret | uint128(b[11])<<uint128(88)
97
+ ret = ret | uint128(b[12])<<uint128(96)
98
+ ret = ret | uint128(b[13])<<uint128(104)
99
+ ret = ret | uint128(b[14])<<uint128(112)
100
+ ret = ret | uint128(b[15])<<uint128(120)
101
+ return ret
102
+ }
103
+
104
+
105
+ func (le littleEndian) Uint256(b []byte) uint256 {
106
+ ret := uint256(b[0])
107
+ ret = ret | uint256(b[1])<<uint256(8)
108
+ ret = ret | uint256(b[2])<<uint256(16)
109
+ ret = ret | uint256(b[3])<<uint256(24)
110
+ ret = ret | uint256(b[4])<<uint256(32)
111
+ ret = ret | uint256(b[5])<<uint256(40)
112
+ ret = ret | uint256(b[6])<<uint256(48)
113
+ ret = ret | uint256(b[7])<<uint256(56)
114
+ ret = ret | uint256(b[8])<<uint256(64)
115
+ ret = ret | uint256(b[9])<<uint256(72)
116
+ ret = ret | uint256(b[10])<<uint256(80)
117
+ ret = ret | uint256(b[11])<<uint256(88)
118
+ ret = ret | uint256(b[12])<<uint256(96)
119
+ ret = ret | uint256(b[13])<<uint256(104)
120
+ ret = ret | uint256(b[14])<<uint256(112)
121
+ ret = ret | uint256(b[15])<<uint256(120)
122
+ ret = ret | uint256(b[16])<<uint256(128)
123
+ ret = ret | uint256(b[17])<<uint256(136)
124
+ ret = ret | uint256(b[18])<<uint256(144)
125
+ ret = ret | uint256(b[19])<<uint256(152)
126
+ ret = ret | uint256(b[20])<<uint256(160)
127
+ ret = ret | uint256(b[21])<<uint256(168)
128
+ ret = ret | uint256(b[22])<<uint256(176)
129
+ ret = ret | uint256(b[23])<<uint256(184)
130
+ ret = ret | uint256(b[24])<<uint256(192)
131
+ ret = ret | uint256(b[25])<<uint256(200)
132
+ ret = ret | uint256(b[26])<<uint256(208)
133
+ ret = ret | uint256(b[27])<<uint256(216)
134
+ ret = ret | uint256(b[28])<<uint256(224)
135
+ ret = ret | uint256(b[29])<<uint256(232)
136
+ ret = ret | uint256(b[30])<<uint256(240)
137
+ ret = ret | uint256(b[31])<<uint256(248)
138
+ return ret
139
+ }
140
+
82
141
func (le littleEndian) PutUint64(b []byte, v uint64) {
83
142
b[0] = byte(v)
84
143
b[1] = byte(v >> uint64(8))
@@ -159,6 +218,63 @@ func (be bigEndian) Uint64(b []byte) uint64 {
159
218
return ret
160
219
}
161
220
221
+ func (be bigEndian) Uint128(b []byte) uint128 {
222
+ ret := uint128(b[15])
223
+ ret = ret | uint128(b[14])<<uint128(8)
224
+ ret = ret | uint128(b[13])<<uint128(16)
225
+ ret = ret | uint128(b[12])<<uint128(24)
226
+ ret = ret | uint128(b[11])<<uint128(32)
227
+ ret = ret | uint128(b[10])<<uint128(40)
228
+ ret = ret | uint128(b[9])<<uint128(48)
229
+ ret = ret | uint128(b[8])<<uint128(56)
230
+ ret = ret | uint128(b[7])<<uint128(64)
231
+ ret = ret | uint128(b[6])<<uint128(72)
232
+ ret = ret | uint128(b[5])<<uint128(80)
233
+ ret = ret | uint128(b[4])<<uint128(88)
234
+ ret = ret | uint128(b[3])<<uint128(96)
235
+ ret = ret | uint128(b[2])<<uint128(104)
236
+ ret = ret | uint128(b[1])<<uint128(112)
237
+ ret = ret | uint128(b[0])<<uint128(120)
238
+ return ret
239
+ }
240
+
241
+
242
+ func (be bigEndian) Uint256(b []byte) uint256 {
243
+ ret := uint256(b[31])
244
+ ret = ret | uint256(b[30])<<uint256(8)
245
+ ret = ret | uint256(b[29])<<uint256(16)
246
+ ret = ret | uint256(b[28])<<uint256(24)
247
+ ret = ret | uint256(b[27])<<uint256(32)
248
+ ret = ret | uint256(b[26])<<uint256(40)
249
+ ret = ret | uint256(b[25])<<uint256(48)
250
+ ret = ret | uint256(b[24])<<uint256(56)
251
+ ret = ret | uint256(b[23])<<uint256(64)
252
+ ret = ret | uint256(b[22])<<uint256(72)
253
+ ret = ret | uint256(b[21])<<uint256(80)
254
+ ret = ret | uint256(b[20])<<uint256(88)
255
+ ret = ret | uint256(b[19])<<uint256(96)
256
+ ret = ret | uint256(b[18])<<uint256(104)
257
+ ret = ret | uint256(b[17])<<uint256(112)
258
+ ret = ret | uint256(b[16])<<uint256(120)
259
+ ret = ret | uint256(b[15])<<uint256(128)
260
+ ret = ret | uint256(b[14])<<uint256(136)
261
+ ret = ret | uint256(b[13])<<uint256(144)
262
+ ret = ret | uint256(b[12])<<uint256(152)
263
+ ret = ret | uint256(b[11])<<uint256(160)
264
+ ret = ret | uint256(b[10])<<uint256(168)
265
+ ret = ret | uint256(b[9])<<uint256(176)
266
+ ret = ret | uint256(b[8])<<uint256(184)
267
+ ret = ret | uint256(b[7])<<uint256(192)
268
+ ret = ret | uint256(b[6])<<uint256(200)
269
+ ret = ret | uint256(b[5])<<uint256(208)
270
+ ret = ret | uint256(b[4])<<uint256(216)
271
+ ret = ret | uint256(b[3])<<uint256(224)
272
+ ret = ret | uint256(b[2])<<uint256(232)
273
+ ret = ret | uint256(b[1])<<uint256(240)
274
+ ret = ret | uint256(b[0])<<uint256(248)
275
+ return ret
276
+ }
277
+
162
278
func (be bigEndian) PutUint64(b []byte, v uint64) {
163
279
b[0] = byte(v >> uint64(56))
164
280
b[1] = byte(v >> uint64(48))
@@ -213,9 +329,6 @@ func ReadUint32(r io.Reader, order ByteOrder) uint32 {
213
329
214
330
func ReadUint64(r io.Reader, order ByteOrder) uint64 {
215
331
bs := make([]byte, 8)
216
- for i, v := range bs {
217
- debug.Printf("bs i %x", v)
218
- }
219
332
n, err := io.ReadFull(r, bs)
220
333
if err.NotNone() {
221
334
return 0
@@ -227,3 +340,31 @@ func ReadUint64FromSlice(slice []byte, order ByteOrder) uint64 {
227
340
buffer := bytes.NewBuffer(slice)
228
341
return ReadUint64(buffer, order)
229
342
}
343
+
344
+ func ReadUint128(r io.Reader, order ByteOrder) uint128 {
345
+ bs := make([]byte, 16)
346
+ n, err := io.ReadFull(r, bs)
347
+ if err.NotNone() {
348
+ return uint128(0)
349
+ }
350
+ return order.Uint128(bs)
351
+ }
352
+
353
+ func ReadUint128FromSlice(slice []byte, order ByteOrder) uint128 {
354
+ buffer := bytes.NewBuffer(slice)
355
+ return ReadUint128(buffer, order)
356
+ }
357
+
358
+ func ReadUint256(r io.Reader, order ByteOrder) uint256 {
359
+ bs := make([]byte, 32)
360
+ n, err := io.ReadFull(r, bs)
361
+ if err.NotNone() {
362
+ return uint256(0)
363
+ }
364
+ return order.Uint256(bs)
365
+ }
366
+
367
+ func ReadUint256FromSlice(slice []byte, order ByteOrder) uint256 {
368
+ buffer := bytes.NewBuffer(slice)
369
+ return ReadUint256(buffer, order)
370
+ }
0 commit comments