Golang的_byteswap_ulong

时间:2015-05-10 16:18:00

标签: go

Golang中_byteswap_ulong的等价物是什么? 它是否作为包存在?

我尝试使用二进制包并与读者一起玩,但无法使其正常工作。我需要在uint64变量中交换字节。

输入为2832779.输出应为8b392b。

3 个答案:

答案 0 :(得分:2)

包编码/二进制具有ByteOrder类型 http://golang.org/pkg/encoding/binary/#ByteOrder

binary.LittleEndian

binary.BigEndian

让你换成不同的订单。

它不完全相同,不仅仅是交换字节。但是可以得到你所需要的东西。

答案 1 :(得分:0)

正如@David所说,使用binary.ByteOrder类型

package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    value := make([]byte, 4)

    // need to know the byte ordering ahead of time
    binary.LittleEndian.PutUint32(value, 0x12345678)

    fmt.Printf("%#v\n", value)

    fmt.Printf("Big Endian Representation, 0x%X\n", binary.BigEndian.Uint32(value))
    fmt.Printf("Little Endian Representation, 0x%X\n", binary.LittleEndian.Uint32(value))
}

Playground link

这将输出:

[]byte{0x78, 0x56, 0x34, 0x12}
Big Endian Representation, 0x78563412
Little Endian Representation, 0x12345678

这些是小端服务器上的big-endian和little-endian表示。

答案 2 :(得分:0)

Golang 1.9在软件包ReverseBytes中添加了math/bits函数家族。

package main

import (
    "fmt"
    "math/bits"
)

func main() {
    fmt.Printf("%x", bits.ReverseBytes32(2832779))
}

Playground link