gpt4 book ai didi

go - 如何使用[] byte作为Registry.GetValue中的缓冲区?

转载 作者:行者123 更新时间:2023-12-01 22:37:25 25 4
gpt4 key购买 nike

GetValue()的注册表包中的文档说:

GetValue检索与打开键k关联的指定值的类型和数据。它填充缓冲区buf 并返回检索到的字节数n。如果buf太小而无法满足存储的值,它将返回ErrShortBuffer错误以及所需的缓冲区大小n。如果没有提供缓冲区,则返回true和实际缓冲区大小n。如果未提供缓冲区,则GetValue仅返回值的类型。如果该值不存在,则返回错误为ErrNotExist。

GetValue是一个低级函数。 如果值的类型是,请改用适当的Get * Value函数。”

就我而言,我不知道注册表项的值类型。但是,我只需要将值打印为字符串即可。 GetValue()接受值名称和一个“缓冲区”,但缓冲区的类型为[] byte。它没有通过引用传递,所以我不能只创建var buf []byte,将其传递并读取它。我无法使用&buf(type *[]byte)传递它。我不能使用byte.Buffer(也键入不匹配)。我觉得我真的缺少一些简单的东西。

码:

var buf []byte //????
_, _, e := myKey.GetValue(valuename, buf)
if e != nil {
panic(e)
}
fmt.Printf("Value: %s\n", string(buf)) // Prints blank

最佳答案

我想您提到的注册表API是Windows注册表。要使用这些类型的API,您必须对调用期望的输出大小进行最佳猜测:

buf:=make([]byte,1024)
typ, n, e := myKey.GetValue(valuename, buf)
if e==ErrShortBuffer {
// Go back, try with a larger buffer size
buf=make([]byte,n)
typ, n, e = myKey.GetValue(valuename, buf)
}

关于go - 如何使用[] byte作为Registry.GetValue中的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58756207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com