zhangzengfei
2024-10-20 2fc94ba7b517125a7ed9771b48bb5d383021bc91
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
package rfid
 
import (
    "encoding/hex"
    "fmt"
    "strconv"
    "strings"
)
 
const (
    ControlWordEPCReadResponse6C uint32 = 0x00011200
    ControlWordConnectionStatus  uint32 = 0x00011112
    ControlWordDeviceInfo        uint32 = 0x00010100
)
 
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
}