mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/yunionio/cloudpods.git
synced 2026-09-20 08:03:53 +08:00
100 lines
1.7 KiB
Go
100 lines
1.7 KiB
Go
package udf
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"time"
|
|
|
|
"golang.org/x/text/encoding/charmap"
|
|
"golang.org/x/text/encoding/unicode"
|
|
"golang.org/x/text/transform"
|
|
)
|
|
|
|
func r_u8(b []byte) uint8 {
|
|
return b[0]
|
|
}
|
|
|
|
func r_i8(b []byte) int8 {
|
|
return int8(r_u8(b))
|
|
}
|
|
|
|
var rl_u64 = binary.LittleEndian.Uint64
|
|
|
|
func rl_u48(b []byte) uint64 {
|
|
var buf [8]byte
|
|
copy(buf[:], b[:6])
|
|
return rl_u64(buf[:])
|
|
}
|
|
|
|
var rl_u32 = binary.LittleEndian.Uint32
|
|
var rl_u16 = binary.LittleEndian.Uint16
|
|
|
|
func rl_i64(b []byte) int64 {
|
|
return int64(rl_u64(b))
|
|
}
|
|
|
|
func rl_i32(b []byte) int32 {
|
|
return int32(rl_u32(b))
|
|
}
|
|
|
|
func rl_i16(b []byte) int16 {
|
|
return int16(rl_u16(b))
|
|
}
|
|
|
|
var rb_u64 = binary.BigEndian.Uint64
|
|
var rb_u32 = binary.BigEndian.Uint32
|
|
var rb_u16 = binary.BigEndian.Uint16
|
|
|
|
func rb_u8(b []byte) uint8 {
|
|
return b[0]
|
|
}
|
|
|
|
func rb_i64(b []byte) int64 {
|
|
return int64(rb_u64(b))
|
|
}
|
|
|
|
func rb_i32(b []byte) int32 {
|
|
return int32(rb_u32(b))
|
|
}
|
|
|
|
func rb_i16(b []byte) int16 {
|
|
return int16(rb_u16(b))
|
|
}
|
|
|
|
func r_dstring(b []byte, fieldlen int) string {
|
|
if fieldlen == 0 {
|
|
return ""
|
|
}
|
|
return string(b[:b[fieldlen-1]])
|
|
}
|
|
|
|
func r_dcharacters(b []byte) string {
|
|
if len(b) == 0 {
|
|
return ""
|
|
}
|
|
switch b[0] {
|
|
case 8:
|
|
s, _, err := transform.Bytes(charmap.Windows1252.NewDecoder(), b[1:])
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return string(s)
|
|
case 16:
|
|
s, _, err := transform.Bytes(unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM).NewDecoder(), b[1:])
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return string(s)
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func r_timestamp(b []byte) time.Time {
|
|
var t time.Time
|
|
t = t.AddDate(int(rl_u16(b[2:])), int(b[4]), int(b[5]))
|
|
t.Add(time.Duration(b[6])*time.Hour +
|
|
time.Duration(b[7])*time.Minute +
|
|
time.Duration(b[8])*time.Second)
|
|
return t
|
|
}
|