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