GolangNote

Golang笔记

Go语言中LittleEndian与BigEndian区别

Permalink

在 Go 语言中,LittleEndianBigEndianencoding/binary 包中定义的两种字节序(Byte Order),它们决定了多字节数据在内存中的存储方式。

主要区别

  1. 字节顺序不同

    • LittleEndian(小端序):低位字节存储在低地址(即内存起始位置)
    • BigEndian(大端序):高位字节存储在低地址
  2. 常见使用场景

    • LittleEndian:x86/x64架构计算机、Windows系统常用
    • BigEndian:网络协议(如TCP/IP)、Java虚拟机、部分嵌入式系统常用

示例说明

以 32 位整数 0x12345678 (十进制 305419896) 为例:

1
2
3
4
内存地址: 0x00 0x01 0x02 0x03
------------------------------
BigEndian:   12    34    56    78
LittleEndian: 78    56    34    12

Go 中的使用

Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
	"encoding/binary"
	"fmt"
)

func main() {
	var num uint32 = 0x12345678
	buf := make([]byte, 4)

	// 使用大端序写入
	binary.BigEndian.PutUint32(buf, num)
	fmt.Printf("BigEndian:    % x\n", buf) // 输出: 12 34 56 78

	// 使用小端序写入
	binary.LittleEndian.PutUint32(buf, num)
	fmt.Printf("LittleEndian: % x\n", buf) // 输出: 78 56 34 12
}

实际应用考虑

  1. 网络通信:通常使用 BigEndian(网络字节序)
  2. 文件格式:取决于具体格式规范
  3. 硬件交互:取决于硬件架构
  4. 性能:在 x86/x64 架构上,LittleEndian 通常有轻微性能优势

Go 的 encoding/binary 包提供了这两种字节序的便捷操作方法,使得在不同系统或协议间转换数据变得更加容易。

本文网址: https://golangnote.com/topic/325.html 转摘请注明来源

Related articles

Go 编程格言谚语

这些 go 格言谚语大多出自 Rob Pike 振奋人心的演讲视频,有很大参考价值。...

vuego: 用GO编写 vue.js 前端

vuego 是一个基于WASM 对Vue.js 的封装,使用Web Assembly 编译。可以让开发者用go 来写Vue.js 前端脚本。...

Go 1.5.1 更新的功能

Go 1.5.1版本对编译器,汇编器, fmt, net/textproto, net/http, 和 runtime 包的 bug 修复。...

Write a Comment to "Go语言中LittleEndian与BigEndian区别"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 11ms