登录
首页 >  Golang >  Go问答

打印包含地址和大小信息的字符串

来源:stackoverflow

时间:2024-02-23 13:45:27 500浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《打印包含地址和大小信息的字符串》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我想通过for循环从地址打印一个字符串。 下面是我写的代码,但是正常运行和调试时给出的结果是不同的。

如何按 str 的地址顺序打印 str 的每个字符。

请帮助我。非常感谢你hhhh <3

这是我的代码!!!

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    str := "Hello, World!"
    startAddr := uintptr(unsafe.Pointer(&str)) // Get the address of the string variable

    for i := 0; i < len(str); i++ {
        ptr := (*byte)(unsafe.Pointer(startAddr + uintptr(i))) // Calculate the pointer address
        fmt.Printf("%c", *ptr)                                  // Dereference the pointer to get the character
    }
}

正确答案


您的尝试不起作用的原因是 &str 返回字符串 header 的地址,而不是字符串的 data 的地址。如果想要字符串数据的地址需要先将&str转换成字符串头,然后通过头来访问数据。您可以使用声明的 reflect.stringheader 来执行此操作,只需确保您阅读其文档并理解其内容

func main() {
    str := "Hello, World!"
    header := (*reflect.StringHeader)(unsafe.Pointer(&str))

    for i := 0; i < len(str); i++ {
        ptr := (*byte)(unsafe.Pointer(header.Data + uintptr(i)))
        fmt.Printf("%c", *ptr)                                  
    }
}

https://go.dev/play/p/knisjym7dx5

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>