bool XmlReader::read(QIODevice* device)
{
QByteArray contents = device->readAll();
QBuffer buffer(&contents);
device = &buffer;//you can also just use &buffer from here on out instead of overwriting the pointer
QByteArray b = fileChecksum(device);
device->reset();
/* ... further reads from device here */
}
字符串会引发错误。
[]byte
也会引发错误。
顺便说一下,例如,sha1值为filename的字符串。
它是否需要utf-8或任何其他编码设置?
谢谢!
答案 0 :(得分:10)
我用来将byte
转换为string
的最简单方法是:
myString := string(myBytes[:])
答案 1 :(得分:3)
我不确定我是否正确理解了问题,但可能是:
var ab20 [20]byte = sha1.Sum([]byte("filename.txt"))
var sx16 string = fmt.Sprintf("%x", ab20)
fmt.Print(sx16)
答案 2 :(得分:2)
在Go中,通过执行string(bytes)
将字节数组(utf-8)转换为字符串,因此在您的示例中,假设string(byte[:n])
是一片字节,它应该是byte
。
答案 3 :(得分:0)
首先,你得到所有这些否定评论,因为你没有提供任何代码。 第二,没有一个很好的例子。这就是我要做的事情
var Buf bytes.Buffer
Buf.Write([]byte)
myString := Buf.String()
Buf.Reset() // Reset the buffer to reuse later
或更好
myString := string(someByteArray[:n])
请参阅here,另见@ JimB的评论
如果您帮助定位您的计划,请说明您尝试过的内容,预期结果和错误。
答案 4 :(得分:0)
由于没有提供有意义的示例,我们只能猜测您的代码出了什么问题。但是首先,我看到string([]byte[:n])
完全无效。 []byte[:n]
不是有效的表达式,因为没有为数组分配内存。由于字节数组可以直接转换为字符串,因此我假设您只是语法错误。
最短有效期为fmt.Println(string([]byte{'g', 'o'}))
答案 5 :(得分:0)
在Go中将[]byte
转换为string
的最简单方法:
myString := string(myBytes)
注意:要像您所要求的那样将“ sha1值转换为字符串”,由于哈希是二进制的,因此需要首先对其进行编码。 SHA哈希的传统编码为十六进制(import "encoding/hex"
):
myString := hex.EncodeToString(sha1bytes)
答案 6 :(得分:0)
ToBe := [6]byte{65, 66, 67, 226, 130, 172}
s:=ToBe[:3]
// this will work
fmt.Printf("%s",string(s))
// this will not
fmt.Printf("%s",string(ToBe))
差异:ToBe是一个数组,而s是一个切片。