切片无法转换为字符串

func (this *AdminModel) Login(v_name string, v_pwd string) (bool, error, uint) {

    o := orm.NewOrm()

    v_pwd_encrypt_byte := md5.Sum([]byte(v_pwd))

    v_pwd_encrypt := string(v_pwd_encrypt_byte[:])

    t_admin := Admin{Name: v_name, Pwd: v_pwd_encrypt}

    fmt.Printf("username:%v  password:%v\n", v_name, v_pwd_encrypt_byte)

    fmt.Printf("username:%v  password:%v\n", v_name, v_pwd_encrypt_byte[:])

    fmt.Printf("username:%v  password:%v\n", v_name, v_pwd_encrypt)

    err := o.Read(&t_admin, "Name", "Pwd")

    if err != nil {

        return false, err, 0

    } else {

        return true, nil, t_admin.Id

    }

}

打印结果:


username:yuhaya  password:[97 22 175 237 203 11 195 16 131 147 92 28 38 47 244 201]

username:yuhaya  password:[97 22 175 237 203 11 195 16 131 147 92 28 38 47 244 201]

username:yuhaya  password:a???

                          ???\&/??

为什么打印结果的最后一行是乱码?


v_pwd_encrypt := string(v_pwd_encrypt_byte[:])

这个职位转换是不可能的吗?


ibeautiful
浏览 167回答 2
2回答

忽然笑

添加到@Ainar-G 的答案中,hex.EncodeToString是最有效的方法,因为它不涉及反射或类型猜测,例如fmt.Sprintf.func main() {    sum := md5.Sum([]byte("meh"))    stringSum := hex.EncodeToString(sum[:])    fmt.Println(stringSum)}

哈士奇WWW

md5.Sum()返回字节,不可打印的 ASCII 字符。如果要查看这些字节的十六进制表示,可以使用fmt.Sprintf("%x", ...),如下所示:v_pwd_encrypt := fmt.Sprintf("%x", v_pwd_encrypt_byte)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go