smo*_*ums 1 encoding endianness go
我不得不在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("\n") //
//////////////////////////////
length:= binary.LittleEndian.Uint32(b) /// <<< Why this results in
/// 117768962 is the question.
fmt.Printf("customLen=%d\n",int(length))
}
Run Code Online (Sandbox Code Playgroud)
dto*_*nay 10
当我们用英语写数字时,我们用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".
| 归档时间: |
|
| 查看次数: |
1829 次 |
| 最近记录: |