2

我有以下 Go 程序:

package main

import (
    "fmt"
)

func main() {
    r := rune(249)
    x := uint16(r)
    fmt.Println(x)
}

如果我有一个rune r并调用uint16(r)它,它将是大端还是小端编码?Go 默认为一个吗?还是这取决于我的硬件?

4

1 回答 1

4

rune类型是 的别名,int32表达式uint16(r)是类型转换,它将保留rune值的最低 16 位。这里不涉及编码或序列化。

当您将值序列化为一系列字节时,Little endian 或 Big endian 就会发挥作用,但这里不会发生这种情况。

看这个例子:

r := rune(0x0000fafa)
fmt.Printf("%x\n", uint16(r))

i := uint32(0xfffffafa)
r = rune(i)
fmt.Printf("%x\n", uint16(r))

输出(在Go Playground上试试):

fafa
fafa
于 2018-01-25T10:23:51.890 回答