带有小字节序的编码Go lang

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有小字节序的编码Go lang相关的知识,希望对你有一定的参考价值。

我不得不在Web服务器上工作,我们的主要工程师编写的部分代码是我不理解的,目前正在尝试破译。这是一个类似的,更简单的版本,在我们的代码库中发生了什么,我想知道是否有人可以一步一步地给我一个深刻的解释。

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("
")            //
    //////////////////////////////
    length:= binary.LittleEndian.Uint32(b)  /// <<< Why this results in                                                 
                                            /// 117768962 is the question.
    fmt.Printf("customLen=%d
",int(length))

}
答案

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

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

binary.LittleEndian.Uint32函数接收一个字节片段,并从中读取一个以little-endian base-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”。

以上是关于带有小字节序的编码Go lang的主要内容,如果未能解决你的问题,请参考以下文章

百度笔试题简述大小端字节序的概念并写一个小程序检测当前机器的大小端字节序

百度笔试题简述大小端字节序的概念并写一个小程序检测当前机器的大小端字节序

带有片段的 RecyclerView

440. 字典序的第K小数字(困难)-字典树-数节点-字节跳动高频题

bom

Android获取各个应用程序的缓存文件代码小片段(使用AIDL)