1. 大端法和小端法

这篇具有很好参考价值的文章主要介绍了1. 大端法和小端法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

int32_t num = 0x01020304;

一个int32_t是4个字节,在内存中的存储是高位字节在低地址,低位字节在高地址。

(数字)前者的高低是数字位数的高低,左边是高位数,右边是低位数;
(地址)后者的高低是内存中的地址的大小,大的值就是高地址。

  1. 大端法:
    1. 大端法和小端法

  2. 小端法:
    1. 大端法和小端法

网络程序要考虑字节序的问题。

由于PC机较多,所以将小端字节序作为主机字节序。而大端字节序用作网络字节序

发送端发送数据时,都将字节序转为大端序,也就是网络字节序。

接受端接收到网络字节序的数据,根据需求决定是否进行转。

代码判断字节序

  1. 利用联合体各成员共用内存空间的特点:

    void check_byte_order()
    {
    	union value {
    		int16_t value;
    		int8_t union_bytes[sizeof (value)];
    	} test;
    	test.value = 0x0102;
    	if (test.union_bytes[0] == 1 && test.union_bytes[1] == 2) {
    		printf ("big endian\n");
    	} else if (test.union_bytes[0] == 2 && test.union_bytes[1] == 1) {
    		printf ("little endian\n");
    	} else {
    		printf ("unknown\n");
    	}
    }
    

    存进去的数字是0x0102,但是不知道在内存中是0x0102还是0x0201这样的顺序存放。
    union_bytes[0]是低地址处的数据,union_bytes[1]是高地址处的数据。
    根据大端小端的定义,进行比较即可。

  2. 直接用指针,道理都一样的:

    void check_byte_order_2()
    {
    	int16_t num = 0x0102;
    	int8_t *addr = (int8_t *) #
    	if (addr[0] == 1 && addr[1] == 2) {
    		printf ("big endian\n");
    	} else if (addr[0] == 2 && addr[1] == 1) {
    		printf ("little endian\n");
    	} else {
    		printf ("unknown\n");
    	}
    }
    
  3. 使用编译器预定义宏,宏的名称并没有标准化,这里使用gcc12:文章来源地址https://www.toymoban.com/news/detail-416655.html

    void check_byte_order_3()
    {
    	if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
    		printf ("little endian\n");
    	else if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
    		printf ("big endian\n");
    	else
    		printf ("unknown\n");
    }
    

到了这里,关于1. 大端法和小端法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#和Java的大端位和小端位的问题

    C#代码里就是小端序,Java代码里就是大端序, 大端位 :big endian,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,也叫高尾端 小端位 :little endian,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,也叫低尾端 这个

    2024年02月12日
    浏览(35)
  • 大端小端及其转换

    计算机在存储数据的时候,是以字节(byte)为基本单位来存储的,因此存储单字节类型的数据(比如char)不存在字节序的问题。但存储多字节的数据的时候(比方说4字节的int变量),就涉及到了以一个什么样的顺序来存储。下面举例来说明大端和小端的存储方式。 定义变量

    2023年04月25日
    浏览(33)
  • 大端存储与小端存储

    上次整型在内存中的存储忘说了一个:   根据数据类型不同,所占的字节数也不同。   所占字节多了,数据在内存中的存储顺序的问题也就出现了。   数据在内存中的存储顺序分两种:   大端[字节序]存储: 把一个数据的高位字节序(字节中存储的数据的位数更高的,可类

    2024年01月20日
    浏览(40)
  • keil_arm 大端小端 寄存器 栈

    @栈result   

    2024年02月11日
    浏览(36)
  • 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs

    5分钟完全理解上述嵌入式、物联网开发中很扯蛋的几个被玩坏概念。 对于涉及 bit 流的概念中 MSB(Most Significant Bit):最高有效位,二进制中代表最高值的比特位,这一位对数值的影响最大。 LSB(Least Significant Bit):最低有效位,二进制中代表最低值的比特位。 以字面值数

    2024年02月15日
    浏览(87)
  • C#中Enumerable.Range(Int32, Int32) 方法用于计算

    目录 一、关于Enumerable.Range(Int32, Int32) 方法 1.定义 2.Enumerable.Range()用于数学计算的操作方法 3.实例1:显示整型数1~9的平方 4.实例2:显示整型数0~9 5.实例3:Enumerable.Range()vs for循环  (1)使用Enumerable.Range() (2)使用for循环 (3)再用Enumerable.Range() (4)再用Enumerable.Range

    2024年01月20日
    浏览(42)
  • Golang中int, int8, int16, int32, int64和uint区别

    在Go语言(Golang)中,整数类型用来表示整数,主要包括int系列和uint系列。这两大系列根据能否表示负数,分为有符号整数和无符号整数。 int系列( 有符号整数 ): int8: 占用1个字节(8位),能够表示的有符号整数范围从 -128到127。 int16: 占用2个字节(16位),能够表示的有

    2024年01月25日
    浏览(61)
  • 【C#】Int32.Parse()、Int16.Parse()

    Int32.Parse() 和 Int16.Parse() 都是 C# 中用于将字符串转换为整数的方法,分别用于处理 32 位整数和 16 位整数。以下是它们的解释: Int32.Parse() : Int32 是 C# 中的数据类型,表示 32 位整数(有符号整数)。 Int32.Parse() 方法用于将字符串转换为 Int32 类型的整数。 例如: Int16.Parse()

    2024年01月19日
    浏览(48)
  • 详解C语言中的int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t

    2023年8月8日,周二上午 目录 为什么会产生int8_t、uint8_t等这类数据类型 int8_t、uint8_t等这类数据类型有什么用 头文件 int8_t、uint8_t等这类数据类型是怎么实现的 根本原因在于,C 语言标准只是规定了各个基本类型的最小字节长度,但并没有指定它们的确切字节长度: char 类型

    2024年02月13日
    浏览(44)
  • C++ //练习 11.12 编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中。

    练习 11.12 编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中。 环境:Linux Ubuntu(云服务器) 工具:vim   代码块 运行结果显示如下

    2024年04月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包