ZBLOG

golang var b *byte 变量b实际是一块char*的内存,如果遍历这个内存 并将其转换为string

在 Go 语言中,将一个指向 char* 类型内存块的 *byte 变量 b 转换为字符串可以通过以下方式实现:

  1. 将 *byte 类型的指针 b 转换为 unsafe.Pointer 类型:
ptr := unsafe.Pointer(b)
  1. 使用 Go 语言的字符串处理函数来读取指针所指向的字符数组。其中,C 字符串是以 null 结尾的字符数组,因此可以使用 strings.TrimRightFunc 函数来去掉字符串末尾多余的 null 字符。
// 获取 char* 指针所指向的 C 字符串
cstr := C.GoString((*C.char)(ptr))

// 去掉字符串末尾多余的 null 字符
gostr := strings.TrimRightFunc(cstr, func(r rune) bool {
    return r == '\x00'
})
  1. 最后得到了一个 Go 语言中的字符串变量 gostr,即为从 char* 指针转换而来。

完整代码示例:

import (
    "unsafe"
    "strings"
)

func main() {
    // 假设 b 是一个 *byte 类型的指针,
    // 其实际是一个 char* 指针
    var b *byte = ...

    // 将 *byte 转换为 unsafe.Pointer
    ptr := unsafe.Pointer(b)

    // 获取 char* 指针所指向的 C 字符串
    cstr := C.GoString((*C.char)(ptr))

    // 去掉字符串末尾多余的 null 字符
    gostr := strings.TrimRightFunc(cstr, func(r rune) bool {
        return r == '\x00'
    })

    // 输出转换后的字符串变量
    fmt.Println(gostr)
}

需要注意的是,这种方式并不安全,在实际开发中应该谨慎使用。如果可能的话,最好避免使用 *byte 类型和 unsafe 包。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3035

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?