ZBLOG

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

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

  1. 将 *byte 类型的指针 b 转换为 unsafe.Pointer 类型:
  1. ptr := unsafe.Pointer(b)
  1. 使用 Go 语言的字符串处理函数来读取指针所指向的字符数组。其中,C 字符串是以 null 结尾的字符数组,因此可以使用 strings.TrimRightFunc 函数来去掉字符串末尾多余的 null 字符。
  1. // 获取 char* 指针所指向的 C 字符串
  2. cstr := C.GoString((*C.char)(ptr))
  3. // 去掉字符串末尾多余的 null 字符
  4. gostr := strings.TrimRightFunc(cstr, func(r rune) bool {
  5. return r == '\x00'
  6. })
  1. 最后得到了一个 Go 语言中的字符串变量 gostr,即为从 char* 指针转换而来。

完整代码示例:

  1. import (
  2. "unsafe"
  3. "strings"
  4. )
  5. func main() {
  6. // 假设 b 是一个 *byte 类型的指针,
  7. // 其实际是一个 char* 指针
  8. var b *byte = ...
  9. // 将 *byte 转换为 unsafe.Pointer
  10. ptr := unsafe.Pointer(b)
  11. // 获取 char* 指针所指向的 C 字符串
  12. cstr := C.GoString((*C.char)(ptr))
  13. // 去掉字符串末尾多余的 null 字符
  14. gostr := strings.TrimRightFunc(cstr, func(r rune) bool {
  15. return r == '\x00'
  16. })
  17. // 输出转换后的字符串变量
  18. fmt.Println(gostr)
  19. }

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?