package task import ( "blazing/logic/service/common" "encoding/binary" "errors" "github.com/pointernil/bitset32" ) type GetTaskBufInboundInfo struct { Head common.TomeeHeader `cmd:"2203|2234" struc:"skip"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID, } type GetTaskBufOutboundInfo struct { TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID, Flag uint32 `json:"flag" description:"暂时未知"` // 暂时未知, TaskList []uint32 `struc:"[20]byte"` // 任务步骤信息, } // 获得任务数组 func (t *GetTaskBufOutboundInfo) GetList() *bitset32.BitSet32 { return bitset32.From(t.TaskList) } // BytesToInt32Slice 将[]byte转换为[]int32 // 注意:src长度必须是4的倍数,因为每个int32由4字节组成 // order参数指定字节序(binary.BigEndian 或 binary.LittleEndian) func BytesToInt32Slice(src []byte, order binary.ByteOrder) ([]int32, error) { // 检查输入长度是否为4的倍数 if len(src)%4 != 0 { return nil, errors.New("输入字节切片长度必须是4的倍数") } // 计算目标切片长度 dstLen := len(src) / 4 dst := make([]int32, dstLen) // 逐个转换4字节为int32 for i := 0; i < dstLen; i++ { // 计算当前位置的字节偏移 offset := i * 4 // 读取4字节并转换为uint32,再转换为int32 dst[i] = int32(order.Uint32(src[offset : offset+4])) } return dst, nil } // Int32SliceToBytes 将[]int32转换回[]byte // order参数指定字节序(binary.BigEndian 或 binary.LittleEndian) func Int32SliceToBytes(src []int32, order binary.ByteOrder) []byte { // 计算目标字节切片长度 dst := make([]byte, len(src)*4) // 逐个将int32转换为4字节 for i, v := range src { // 计算当前位置的字节偏移 offset := i * 4 // 将int32转换为uint32,再写入字节切片 order.PutUint32(dst[offset:offset+4], uint32(v)) } return dst }