先说下场景,golang作为服务端,c++做的客户端(硬件,其他公司做的)
问题: 硬件对01170303001 转成hex 得到的值是00300031003100370030003300300033003000300031
服务端对01170303001 使用fmt.Sprintf("%X",01170303001)转成hex 得到的值是3031313730333033303031
00300031003100370030003300300033003000300031 和3031313730333033303031 使用hex.DecodeString() 解析出来 都是01170303001 但是如果声明一个map[string]interface{} 以第一个解析出来的01170303001作为key写入一个值 再用第二解析出来的01170303001作为key 去获取这个值 你会发现获取不到
本来正常来说01170303001转hex的话 直接fmt.Sprintf("%X",01170303001)就行了 得到3031313730333033303031 但是硬件那边使用内置方法得到的是00300031003100370030003300300033003000300031 如果要对齐的话 golang需要range []rune("01170303001") 然后挨个fmt.Sprintf("%04X",value) 然后拼接
反过来拿到的00300031003100370030003300300033003000300031 如果要向3031313730333033303031对齐的话 就需要去掉每个值前面的前导00 得到3031313730333033303031 再来转的话就没问题了
但是不管00300031003100370030003300300033003000300031还是3031313730333033303031 转过来都是01170303001 以01170303001作为key 切不能相互调用 这点我就迷茫了 内存里面存的这两个01170303001 我比较了下 不相等 但是 不相等的原因我就晓不得了
有知道原因的麻烦说下,在此谢过
更多评论
从byte来说是有多余的空格,但是这里作为map的key的时候是转成字符串了的,print输出结果我没看到你说的0 1 1 ……,你可以打印出来看下
#3