【发布时间】:2018-02-11 17:22:10
【问题描述】:
我正在将一个库从 Java 移植到 Go。这个库传递所有参数并作为字符串返回,我必须在后续步骤中保持这种方式。我注意到,当我将 rune/int8 数组转换为字符串并转换回 rune/int8 数组时,我得到了不同的值。我相信这是由 Unicode 字符引起的。有没有办法获得相同的值?
package main
import "fmt"
func main() {
runes := make([]rune,3)
runes[0] = 97
runes[1] = -22
runes[2] = 99
s := string(runes)
fmt.Println(runes)
for _,r := range(s) {
fmt.Println(r)
}
}
输出:
[97 -22 99]
97
65533
99
【问题讨论】:
-
-22 不是有效符文
-
嗨@JimB,如果我使用 int8 我会得到相同的结果。关键是如何将负值存储在字符串上然后将其取回。
-
字节是用java签名的,所以当你打印一个单独的字节时,你可以得到
[-128, 127]范围内的东西。 Go 想要 uint8,在你的情况下是234。 -
嗨 @Marc 我在 godocs link 上读到,符文是 int32,所以范围没问题。我不明白为什么我会得到不同的值。如果在示例代码中我们将 rune 更改为 int32,结果将是相同的
-
好的,范围没问题,但是当你试图说出字符值
234时,你仍然给它一个负数。