1. 大端法和小端法

news2024/11/24 15:02:42
int32_t num = 0x01020304;

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

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

  1. 大端法:
    在这里插入图片描述

  2. 小端法:
    在这里插入图片描述

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

由于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:

    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");
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git代码使用空格缩进

1、idea设置缩进符为空格 Java 代码 golang 代码 2、设置提交仓库时的空格处理,否则 golang 代码为了减少文件大小,可能会把空格缩进改为制表符。 设置当前仓库配置 git config core.whitespace "-trailing-space,space-before-tab" 设置当前…

Pytorch深度学习实战3-7:详解数据加载DataLoader与模型处理

目录1 数据集Dataset2 数据加载DataLoader3 常用预处理方法4 模型处理5 实例:MNIST数据集处理1 数据集Dataset Dataset类是Pytorch中图像数据集操作的核心类,Pytorch中所有数据集加载类都继承自Dataset父类。当我们自定义数据集处理时,必须实…

从TOP25榜单,看半导体之变

据SIA报告显示,2022年全球半导体销售额创历史新高达到5740亿美元。尽管2022年下半年,半导体市场出现了周期性的低迷,但其全年的销售额相较2021年增长了3.3%。 近日,市调机构Gartner发布了全球以及中国大陆TOP25名半导体厂商的排名…

js数组API的时间复杂度大全

一句话总结: 数组为连续且有序的数据结构, 所以若根据下标查找则很快,index[i]一步到位就可实现查询,若遍历查找则很慢(相对而言)。而插入和删除,除了数组末尾的增删很快,其它处则很慢,因为若数组某处要插入…

【服务器数据恢复】 重装系统导致xfs文件系统分区丢失的数据恢复案例

服务器数据恢复环境: EMC某型号存储,20块磁盘组建raid5磁盘阵列,划分2个lun。 服务器故障: 管理员执行重装系统操作后发现分区发生改变,原先的sdc3分区丢失,该分区采用xfs文件系统,存储了公司重…

开放式耳机好用吗,推荐几款不错的开放式耳机

​开放式耳机是一种新型的耳机,相比于传统的耳机,开放式耳机听歌时不需要将耳朵堵上,不会因为长时间佩戴而对听力造成损害。它不需要入耳也能听到声音,在户外运动时能够及时听到环境音,避免安全隐患。现在在骨传导市面…

nodejs+vue 沃健身房管理系统

3)系统分析 本章主要是对系统可行性、系统性能、还有系统功能需求进行分析。 (4)系统设计 对系统系统功能和数据库等进行详细讲解。 (5)系统的实现 主要对个人中心、课程分类管理、用户管理、健身器材管理、健身教练管理、预约教练管理、健身课程管理、课程订单管理、健身视频管…

ESP32学习笔记08-adc单通道数据采集

8. adc单通道数据采集 8.1RTC SAR ADC 控制器 8.2ADC相关的api 8.2.1 配置adc的位宽 esp_err_t adc1_config_width(adc_bits_width_t width_bit);width_bit :位宽 返回值 ESP_OK 配置成功 ESP_ERR_INVALID_ARG 参数错误 esp32最大的宽度的12位typedef enum {

STM8S208MB -> 寄存器方式实现对Flash的连续读写操作(IAR)

代码 File: STM8S208MB_Flash_Op.c /*file: STM8S208MB_Flash_Op.cbrief: 读写Flashdata: 2023-04-14author: ArcherQAQ */#include "STM8S208MB_Flash_Op.h" #include "stdio.h"u8 dataBuf[] {0xFF, 0xFF}; // 写入Flash的数据 u8 Rec_Buf[100] {0x00…

天猫数据分析:2023年速食品(方便面)市场数据分析

我国的方便面市场是一个比较活跃的市场,其市场规模也比较庞大。近年来,随着中国经济的发展,消费者对方便面的需求量和要求也在不断变化,因此,我国方便面市场的规模和消费者的需求环境也正在不断改变。 根据鲸参谋电商数…

Excel技能之排名,小函数很强大

你还在熬夜加班搞Excel吗? 你还在用手指,指着电脑屏幕,一行一行核对数据吗? 你还在害怕被笑而不敢问同事吗? 赶紧来学Excel,收藏加关注,偷偷地进步!日积月累,必成大器&am…

12-python内存地址

1.查看内存地址 a1 print(id(a)) # 24319294835042.数据类型 (1)不可变数据类型:数值、字符串、布尔值、元组 数据存储在计算机中的某个位置,不管赋值给谁,内存地址都相同 a"jack" b"jack" prin…

常见分布式锁3:Redis setNx

Redis实现分布式锁的核心便在于SETNX命令,它是SET if Not eXists的缩写,如果键不存在,则将键设置为给定值,在这种情况下,它等于SET;当键已存在时,不执行任何操作;成功时返回1&#x…

【python游戏】努力制造阳光,让植物有力量对抗僵尸吧~

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 晃着脑袋生产阳光的向日葵,突突突吐着子弹的豌豆射手!​ 行动迟缓种类丰富的僵尸…… 印象最深的是“僵尸吃掉了你的脑子!” 还有疯狂的戴夫,无一不唤醒着我们的童年记忆​ 山…

Hive 拉链表的两种实现方式

目录 1.什么是拉链表 2.拉链表的产生背景 2.1数据同步 2.1.1全量同步 2.1.2增量同步 2.2增量同步和拉链表 3.拉链表的实现方式 3.1数据准备 3.2思路1 3.3思路2 1.什么是拉链表 我们首先要知道,拉链表是一个逻辑上的概念。 拉链表记录的是增量数据&#x…

(链表专题) 328. 奇偶链表 ——【Leetcode每日一题】

328. 奇偶链表 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个 节点的索引被认为是 奇数 , 第二个 节点的索引为 偶数 ,以此类推。 请注意,偶…

在 RISC-V Linux 内核中添加模块

在 RISC-V Linux 内核中添加模块 flyfish 本例以添加helloworld字符设备为例 一 源码配置 1 源码 源码文件helloworld.c拷贝到 drivers/char 目录中 源码主要是输出Hello world init 2 Kconfig 打开drivers/char 目录下的Kconfig文件 在endmenu之前加上 config HELLO…

统信UOS专业版系统安装教程 - 全盘安装UOS系统

全文导读:本文介绍了UOS系统安装(全盘安装)的过程,如果没有特殊要求,推荐安装UOS系统都采用全盘安装。 准备环境 制作好统信UOS专业版启动U盘 一台CPU频率≥2GHz、内存≥4GB、硬盘≥64GB的电脑 安装步骤 一、制作…

MySQL复合查询

文章目录一、多表查询二、自连接三、子查询1.单行子查询2.多行子查询3.多列子查询4.在 from 子句中使用子查询5.合并查询一、多表查询 在实际开发中,数据往往来自不同的表,所以需要多表查询。 对多张表做笛卡尔积,实际上就是多张表的所有记…

js 特殊对象 - 数组

1.概述 数组也是对象的一种,数组是一种用于表达有顺序关系的值的集合的语言结构,也就是同类数据元素的有序集合。 数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据。但是在JavaScript中是支持数组可以是不同的元素&…