mirror of
https://github.com/fumiama/go-base16384.git
synced 2026-06-05 00:32:52 +08:00
优化代码结构
This commit is contained in:
@@ -6,8 +6,10 @@ import "encoding/binary"
|
||||
func encodeGeneric(offset, outlen int, b, encd []byte) {
|
||||
var n int
|
||||
i := 0
|
||||
if len(b) == 7 {
|
||||
if len(b)%7 == 0 {
|
||||
b = append(b, 0)
|
||||
}
|
||||
for ; i <= len(b)-7; i += 7 {
|
||||
shift := binary.BigEndian.Uint64(b[i:]) >> 2
|
||||
sum := shift
|
||||
sum &= 0x3fff000000000000
|
||||
@@ -19,54 +21,37 @@ func encodeGeneric(offset, outlen int, b, encd []byte) {
|
||||
sum |= shift & 0x0000000000003fff
|
||||
sum += 0x4e004e004e004e00
|
||||
binary.BigEndian.PutUint64(encd[n:], sum)
|
||||
} else {
|
||||
if len(b)%7 == 0 {
|
||||
b = append(b, 0)
|
||||
}
|
||||
for ; i <= len(b)-7; i += 7 {
|
||||
shift := binary.BigEndian.Uint64(b[i:]) >> 2
|
||||
sum := shift
|
||||
sum &= 0x3fff000000000000
|
||||
shift >>= 2
|
||||
sum |= shift & 0x00003fff00000000
|
||||
shift >>= 2
|
||||
sum |= shift & 0x000000003fff0000
|
||||
shift >>= 2
|
||||
sum |= shift & 0x0000000000003fff
|
||||
sum += 0x4e004e004e004e00
|
||||
binary.BigEndian.PutUint64(encd[n:], sum)
|
||||
n += 8
|
||||
}
|
||||
if offset > 0 {
|
||||
sum := 0x000000000000003f & ((uint64)(b[i]) >> 2)
|
||||
sum |= ((uint64)(b[i]) << 14) & 0x000000000000c000
|
||||
if offset > 1 {
|
||||
sum |= ((uint64)(b[i+1]) << 6) & 0x0000000000003f00
|
||||
sum |= ((uint64)(b[i+1]) << 20) & 0x0000000000300000
|
||||
if offset > 2 {
|
||||
sum |= ((uint64)(b[i+2]) << 12) & 0x00000000000f0000
|
||||
sum |= ((uint64)(b[i+2]) << 28) & 0x00000000f0000000
|
||||
if offset > 3 {
|
||||
sum |= ((uint64)(b[i+3]) << 20) & 0x000000000f000000
|
||||
sum |= ((uint64)(b[i+3]) << 34) & 0x0000003c00000000
|
||||
if offset > 4 {
|
||||
sum |= ((uint64)(b[i+4]) << 26) & 0x0000000300000000
|
||||
sum |= ((uint64)(b[i+4]) << 42) & 0x0000fc0000000000
|
||||
if offset > 5 {
|
||||
sum |= ((uint64)(b[i+5]) << 34) & 0x0000030000000000
|
||||
sum |= ((uint64)(b[i+5]) << 48) & 0x003f000000000000
|
||||
}
|
||||
n += 8
|
||||
}
|
||||
if offset > 0 {
|
||||
sum := 0x000000000000003f & ((uint64)(b[i]) >> 2)
|
||||
sum |= ((uint64)(b[i]) << 14) & 0x000000000000c000
|
||||
if offset > 1 {
|
||||
sum |= ((uint64)(b[i+1]) << 6) & 0x0000000000003f00
|
||||
sum |= ((uint64)(b[i+1]) << 20) & 0x0000000000300000
|
||||
if offset > 2 {
|
||||
sum |= ((uint64)(b[i+2]) << 12) & 0x00000000000f0000
|
||||
sum |= ((uint64)(b[i+2]) << 28) & 0x00000000f0000000
|
||||
if offset > 3 {
|
||||
sum |= ((uint64)(b[i+3]) << 20) & 0x000000000f000000
|
||||
sum |= ((uint64)(b[i+3]) << 34) & 0x0000003c00000000
|
||||
if offset > 4 {
|
||||
sum |= ((uint64)(b[i+4]) << 26) & 0x0000000300000000
|
||||
sum |= ((uint64)(b[i+4]) << 42) & 0x0000fc0000000000
|
||||
if offset > 5 {
|
||||
sum |= ((uint64)(b[i+5]) << 34) & 0x0000030000000000
|
||||
sum |= ((uint64)(b[i+5]) << 48) & 0x003f000000000000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sum += 0x004e004e004e004e
|
||||
var tmp [8]byte
|
||||
binary.LittleEndian.PutUint64(tmp[:], sum)
|
||||
copy(encd[n:], tmp[:])
|
||||
encd[outlen-2] = '='
|
||||
encd[outlen-1] = byte(offset)
|
||||
}
|
||||
sum += 0x004e004e004e004e
|
||||
var tmp [8]byte
|
||||
binary.LittleEndian.PutUint64(tmp[:], sum)
|
||||
copy(encd[n:], tmp[:])
|
||||
encd[outlen-2] = '='
|
||||
encd[outlen-1] = byte(offset)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user