buffers
Examples of how to allocate a buffer, write in big or little endian format, encode to a hex string, and check if buffers are equal.
# Node.js
const buf = Buffer.alloc(6);
let value = 0x1234567890ab;
let offset = 0;
let byteLength = 6;
buf.writeUIntBE(value, offset, byteLength);
let hexstr = buf.toString("hex");
console.log(hexstr);
const buf2 = Buffer.alloc(6);
value = 0x1234567890ab;
offset = 0;
byteLength = 6;
buf2.writeUIntLE(value, offset, byteLength);
hexstr = buf2.toString("hex");
console.log(hexstr);
let isEqual = Buffer.compare(buf, buf2) === 0;
console.log(isEqual);
isEqual = Buffer.compare(buf, buf) === 0;
console.log(isEqual);
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
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
Output
1234567890ab
ab9078563412
false
true
1
2
3
4
2
3
4
# Go
package main
import (
"bytes"
"encoding/binary"
"encoding/hex"
"fmt"
"log"
"math/big"
"reflect"
)
func writeUIntBE(buffer []byte, value, offset, byteLength int64) {
slice := make([]byte, byteLength)
val := new(big.Int)
val.SetUint64(uint64(value))
valBytes := val.Bytes()
buf := bytes.NewBuffer(slice)
err := binary.Write(buf, binary.BigEndian, &valBytes)
if err != nil {
log.Fatal(err)
}
slice = buf.Bytes()
slice = slice[int64(len(slice))-byteLength : len(slice)]
copy(buffer[offset:], slice)
}
func writeUIntLE(buffer []byte, value, offset, byteLength int64) {
slice := make([]byte, byteLength)
val := new(big.Int)
val.SetUint64(uint64(value))
valBytes := val.Bytes()
tmp := make([]byte, len(valBytes))
for i := range valBytes {
tmp[i] = valBytes[len(valBytes)-1-i]
}
copy(slice, tmp)
copy(buffer[offset:], slice)
}
func main() {
buf := make([]byte, 6)
writeUIntBE(buf, 0x1234567890ab, 0, 6)
fmt.Println(hex.EncodeToString(buf))
buf2 := make([]byte, 6)
writeUIntLE(buf2, 0x1234567890ab, 0, 6)
fmt.Println(hex.EncodeToString(buf2))
isEqual := reflect.DeepEqual(buf, buf2)
fmt.Println(isEqual)
isEqual = reflect.DeepEqual(buf, buf)
fmt.Println(isEqual)
}
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
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
Output
1234567890ab
ab9078563412
false
true
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2022/09/30, 11:34:22