簡體   English   中英

切片無法轉換為字符串

[英]Slice can not convert to string

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[:])

這個職位轉換成問題了嗎?

添加到@ Ainar-G的答案中, hex.EncodeToString是執行此操作的最有效方法,因為它不像fmt.Sprintf那樣涉及反射或類型猜測。

func main() {
    sum := md5.Sum([]byte("meh"))
    stringSum := hex.EncodeToString(sum[:])
    fmt.Println(stringSum)
}

md5.Sum()返回字節,而不是可打印的ASCII字符。 如果要查看這些字節的十六進制表示,可以使用fmt.Sprintf("%x", ...) ,如下所示:

v_pwd_encrypt := fmt.Sprintf("%x", v_pwd_encrypt_byte)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM