| | |
| | | package rfid |
| | | |
| | | import ( |
| | | "encoding/hex" |
| | | "fmt" |
| | | "strconv" |
| | | "strings" |
| | | ) |
| | | |
| | | const ( |
| | | ControlWordEPCReadResponse6C uint32 = 0x00011200 |
| | | ) |
| | | |
| | | func Parse2Floor(input string) (string, error) { |
| | | // 定义前缀 |
| | | prefix := "E250019506C" |
| | | |
| | | // 检查字符串是否包含指定前缀 |
| | | if !strings.HasPrefix(input, prefix) { |
| | | return "", fmt.Errorf("字符串没有以指定前缀 %s 开始", prefix) |
| | | } |
| | | |
| | | // 提取长度部分的字符串并转换成整数 |
| | | lengthStr := input[len(prefix) : len(prefix)+2] |
| | | length, err := strconv.Atoi(lengthStr) |
| | | if err != nil { |
| | | return "", fmt.Errorf("长度解析错误: %v", err) |
| | | } |
| | | |
| | | //fmt.Println("data len ", length) |
| | | |
| | | // 获取末尾的字符,按照指定长度进行截取 |
| | | if len(input) < len(prefix)+2+length { // 每个字符是2个十六进制字符表示 |
| | | return "", fmt.Errorf("字符串长度不足") |
| | | } |
| | | |
| | | hexSection := input[len(input)-length:] |
| | | |
| | | // 将十六进制字符串转换为字节数组 |
| | | bytes, err := hex.DecodeString(hexSection) |
| | | if err != nil { |
| | | return "", fmt.Errorf("十六进制解析错误: %v", err) |
| | | } |
| | | |
| | | // 将字节数组转换为字符串 |
| | | return string(bytes), nil |
| | | } |