The*_*hna 16 type-conversion go
我有一个大小的字节数组,我做了之后md5.Sum().
data := []byte("testing")
var pass string
var b [16]byte
b = md5.Sum(data)
pass = string(b)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
无法将b(类型[16]字节)转换为字符串类型
One*_*One 24
有点晚,但请记住,使用string(b[:])将打印大多数无效字符.
如果你试图像php一样得到它的十六进制表示,你可以使用类似的东西:
data := []byte("testing")
b := md5.Sum(data)
//this is mostly invalid characters
fmt.Println(string(b[:]))
pass := hex.EncodeToString(b[:])
fmt.Println(pass)
// or
pass = fmt.Sprintf("%x", b)
fmt.Println(pass)
Run Code Online (Sandbox Code Playgroud)
更新 02/01/2023
据此,不安全:添加 StringData、String、SliceData,reflect.StringHeader并且reflect.SliceHeader可能在Go 1.20. 并且unsafe.StringData, unsafe.String, 和unsafe.SliceData将取代它们,请参阅1.20 发行说明
该
unsafe包定义了三个新函数SliceData、String和StringData。与 Go 1.17 的 Slice 一起,这些函数现在提供了构造和解构切片和字符串值的完整功能,而不依赖于它们的确切表示。
func String2Bytes(s string) []byte {
if s == "" {
return nil
}
return unsafe.Slice(unsafe.StringData(s), len(s))
}
func Bytes2String(b []byte) string {
if len(b) == 0 {
return ""
}
return unsafe.String(unsafe.SliceData(b), len(b))
}
Run Code Online (Sandbox Code Playgroud)
开始之前 1.20
func Bytes2StrImp(b []byte) string {
sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b))
var s string
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
sh.Data = sliceHeader.Data
sh.Len = sliceHeader.Len
return s
}
Run Code Online (Sandbox Code Playgroud)
上述方案通过Pointer操作将字节数组转换为字符串。将string(b[:])创建一个新的字符串对象并将数据从字节数组复制到字符串。
基准测试结果为string(b[:])
func Bytes2StrRaw(b []byte) string {
return string(b[:])
}
Run Code Online (Sandbox Code Playgroud)
BenchmarkBytes2StrRaw-12 275305142 4.40 ns/op
BenchmarkBytes2StrImp-12 1000000000 0.315 ns/op
Run Code Online (Sandbox Code Playgroud)
虽然这里有一些简单的答案,但我想给出一种更有效的解决方案
BenchmarkBytes2StrRaw-12 275305142 4.40 ns/op
BenchmarkBytes2StrImp-12 1000000000 0.315 ns/op
Run Code Online (Sandbox Code Playgroud)
小智 5
这可以解决
pass = fmt.Sprintf("%x", b)
Run Code Online (Sandbox Code Playgroud)
要么
import "encoding/base64"
pass = base64.StdEncoding.EncodeToString(b[:])
Run Code Online (Sandbox Code Playgroud)
这会将其编码为base64字符串
| 归档时间: |
|
| 查看次数: |
9980 次 |
| 最近记录: |