小端编码 Go lang

Encoding with little endianness Go lang

我不得不在网络服务器上工作,我们的首席工程师编写的部分代码我不理解,目前正在尝试破译。这是我们的代码库中发生的事情的类似且更简单的版本,我想知道是否有人可以一步一步地给我一个深入的解释。

package main
import "fmt"
import "encoding/binary"
func main() {
////////////////////////////////// no need to explain anything
    b := []byte{2,3,5,7,11,13} /// within this comment block.
    for _,e := range b {        //
    fmt.Printf("%d ",e)         //
    }                           //
    fmt.Printf("\n")            //
    //////////////////////////////
    length:= binary.LittleEndian.Uint32(b)  /// <<< Why this results in                                                 
                                            /// 117768962 is the question.
    fmt.Printf("customLen=%d\n",int(length))

}

当我们用英文写数字时,我们用 big-endian 以 10 进制表示。例如,数字“4567”被理解为表示 4*10^3 + 5*10^2 + 6*10^1 + 7*10^0。这是 base-10 因为每个写入的数字与相邻数字的重要性相差 10 倍,并且它是 big-endian 因为第一个写入的数字与 10 的最大幂相关联。

相同的数字 4567 可以在 little-endian base-10 中写为“7654”,在 little-endian 表示中表示 7*10^0 + 6*10^1 + 5*10^2 + 4*10^3,在数字上与上一段相同.这是 little-endian 因为第一个写入的数字与 10 的最小幂相关联。

binary.LittleEndian.Uint32函数接收一段字节并从中读出一个以little-endianbase-256表示的32位无符号整数。

因此,如果输入切片 b 中的 base-256 数字与代码中的一样 2,3,5,7,则这些字节的 little-endian base-256 解释为 2*256^0 + 3*256^1 + 5*256^2 + 7*256^3。以 big-endian base-10 编写的相同数字(fmt.Printf 将向您显示)是“117768962”。