C语言中的大小端

C语言中的大小端字节序 大小端字节序1.大小端的概念2.为什么有大小端之分3.相关函数3.1htonl()函数3.2 C语言中数据是存储在内存中的,而内存空间又被划分为以字节为单位的连续地址空间,那么,我们定义的变量是在内存中如何存储的呢。我们把变量在内存中的存储分为两种,大端字节序存储与小端字节序存储。 网络字节序都是大端字节序 主机字节序看本身电脑的情况,有可能是大端有可能是小端 1.大小端的概念 大小端字节序的概念... 阅读详情

最近的状态真是糟糕透了,连大端小端的问题也含含糊糊才搞出来,还是基础不够扎实呀!

     平时不做大端小端的判断(默认都是小端),时间长了就只仿佛记得大端小端和鸡蛋有关系^:^

一、大端小端的概念(以下概念来自网络)

端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。

如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,本书使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。

地址偏移

大端模式

小端模式

0x00

12(OP0)

78(OP3)

0x01

34(OP1)

56(OP2)

0x02

56(OP2)

34(OP1)

0x03

78(OP3)

12(OP0)

如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移

大端模式

小端模式

0x00

12(OP0)

34(OP1)

0x01

34(OP1)

12(OP0)

由上表所知,采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将低位存放在低地址。采用大端方式 进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。

二、程序判断

#i nclude <stdio.h>

union little_big_end
{
 short x16;
 long y32;
};

int main(void)
{
 little_big_end lbe;

 printf("the size of lbe=%d\n",sizeof(lbe));

 lbe.y32 = 0x12345678;

 if(lbe.x16 == 0x1234 )
 {
  printf("the memory format is big end!\n");
 }
 else if(lbe.x16 == 0x5678 )
 {
  printf("the memory format is little end!\n");
 }

 getchar();

 return 0;
}

当然,直接存入0x12345678,再读取低地址数据做判断也可以做判断。(这里顺便复习一下共用体的用法)

【C语言】整数存储、大小端概念 这是因为在计算机系统中,我们是谈学掌的,个地都好应着一个字节,一个字节为8bit 位,但是在C语言中除了8 bit的 char 之外,还有16 bit的 short 型,32 bit的 long 型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。比如上面这个例子,我们往往会遇到要连续输入的情况,而我们会用上面这种方法来检验输入是否错误,但因为按位取反操作符~的存在,我们也可以利用下面这种方法。 阅读详情

相关推荐

C语言%u、%d打印的规则、数据在内存中的存储及大小端存储模式

大小端、%u、%d打印的规则、数据在内存中的存储 目录 文章目录大小端、%u、%d打印的规则、数据在内存中的存储数据在内存中的存储整形存储无符号整型、无符号整型的打印char类型的打印浮点型存储大小端模式判断机器大小端方法 数据在内存中的存储 整形存储 一个变量的创建是要在内存中开辟空间的,空间的大小是根据不同的类型而决定的。 像 int a = 20; int b = -10; 这样的整形数据在内存中是如何存储的呢? 我们先来了解以下的概念: 原码、反码、补码 计算机中的有符号数有三种表示方法,即原码、

aaaaaaaWoLan的博客 1万+

C面试题(判断大端小端)

     最近的状态真是糟糕透了,连大端小端的问题也含含糊糊才搞出来,还是基础不够扎实呀!      平时不做大端小端的判断(默认都是小端),时间长了就只仿佛记得大端小端和鸡蛋有关系^:^ 一、大端小端的概念(以下概念来自网络) 端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将

王贵平的专栏—分享学习的快乐,感悟人生的真谛! 2865

C语言测试大小端模式

大小端是什么?这个问题在这里不做过多解释,可以参考:大小端模式详解。 但还是给出一些基本概念: 大小端问题产生的原因:由于在各种体系结构的处理器中,对多个字节数据的内存操作有着不同的定义,所以当处理器在读写一个多个字节内存时,可能涉及到大小端问题。如果处理器读写指令针的数据长度不一致的时候,就会产生大小端的问题。在小端模式中,数据的低字节将会存放在内存的低地址处,数据的高字节会存放在内存的高地址

繁城落叶 4518

C语言数据的存储

C语言数据的存储

fuxiaopangfyy的博客 145

C语言中的大小端问题

大小端问题是计算机系统中的一个重要概念,在C语言中,了解和处理大小端问题非常重要。本文介绍了大端序和小端序的概念,并给出了检测系统字节序和进行大小端转换的代码示例。在实际编程中,需要根据具体情况判断是否需要处理大小端问题,并采取相应的措施,并采取相应的措施,以确保数据的正确存储和传输。在计算机系统中,字节序(Byte Order)指的是多字节数据在内存中存储的顺序。在大端序中,它将被存储为0x12(高位字节)和0x34(低位字节)。而在小端序中,它将被存储为0x34(低位字节)和0x12(高位字节)。

DarcyCode的博客 328

C 语言中的指针与联合测大小端

在大端模式中,数据的高位字节存储在内存的低地址处,低位字节存储在高地址处。例如,对于一个 4 字节的整数0x12345678地址: 0x00 0x01 0x02 0x03值: 0x12 0x34 0x56 0x78将多字节数据的地址强制转换为指向字节的指针。通过访问数据的第一个字节,判断系统的大小端。

m0_62599305的博客 855

C语言的数据类型及其存储方式

1,常见的数据类型 2,整形家族 3,浮点型家族 4,构造类型 5,指针类型 6,空类型 1,原码,反码和补码 2,大小端字节序介绍 1,浮点数的存储规则 2,数字M和指数E的特殊规定双精度浮点型 整型分为有符号整型和无符号整型:longunsigned long [ int ] 我们正常情况下的类型声明都是

m0_71676870的博客 1332

Ubuntu18.04黑屏救急指南:从tty到图形界面的5种恢复方法(附网络配置技巧)

本文针对Ubuntu 18.04系统启动后出现黑屏并进入tty命令行的问题,提供了一套从紧急诊断到完全恢复图形化界面的系统性实战指南。文章详细讲解了五种核心恢复方法,包括重启显示管理器、重装ubuntu-desktop桌面环境、手动安装Xorg与LightDM等,并重点解决了纯命令行环境下的网络配置难题,帮助用户快速修复系统,恢复工作环境。

weixin_29243279的博客 359

C语言 ---- 大小端

大小端

weixin_52669146的博客 1943

MBIST --- PATR2.Memorybist 测试流程

mem bist作为现在design设计中不可或缺的DFT设计内容,越发重要。本章节主要介绍mem bist的flow,如何在tessent中实现mbist以及tessent中的一些命令和mode。

sinat_27691203的博客 6005

GMSL2摄像头接入避坑指南:从FMC子卡配置到V4L2调用的完整流程(附Ubuntu20.04实测)

本文详细解析了GMSL2摄像头接入的全流程,从FMC子卡配置到V4L2调用的完整指南。基于XC7Z100平台实测经验,提供了硬件选型、带宽优化、Linux驱动配置及高分辨率采集的实战技巧,帮助开发者规避常见问题,提升系统稳定性与性能。

weixin_33737774的博客 418

【C语言】大小端

大小端是计算机存储多字节数据的两种字节序:大端模式将高位字节存于内存低地址(如0x12345678按0x12、0x34、0x56、0x78顺序存储),小端模式则相反,低位字节存于低地址(如0x78为首字节)。该差异源于处理器对多字节数据存储方式的不同需求,大端便于快速判断数据符号,小端利于强制类型转换。通过指针读取整型变量首字节(如int a=1时首字节为1则为小端)或共用体共享内存特性可判断机器字节序,其本质是数据高低位字节在内存中的存放顺序差异,直接影响跨平台数据传输与处理的兼容性。

LiuYaoheng的博客 1921

Linux虚拟机mysql安装教程(详细步骤)出现了一个错误:依赖检测失败

Linux虚拟机安装mysql的详细步骤(有报错预警哦)

m0_74953387的博客 5257

c语言大小端判断

大小端(Endianness)是计算机系统表示多字节数据的一种方式,它决定了多字节数据的存储顺序。在计算机系统中,多字节数据(如32位或64位的整数)的存储方式有两种:大端(Big-endian)和小端(Little-endian)。为什么要区分大小端?不同的处理器和操作系统可能采用不同的端序,所以在进行数据交换时(比如网络通信或读取文件),需要知道数据的端序,以确保正确解析数据。本章主要介绍了大小端在内存中排列方式,直观的展示了大小端的格式和区别。

qq_56992543的博客 1218

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 269

【Java基础知识 1】Java入门级概述

优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

学Java,找哪吒 16万+

c语言大小端序怎么判断,用C语言程序判断大小端模式

用C语言程序判断大小端模式1.大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式相反2.为什么有大小端之分???因为在计算机系统中,存储是以字节为单位的,每个地址单元都对应着一个字节,一个字节=8bit。在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。对于位数大于8位的处理器,例如16位或者32...

weixin_42514310的博客 3586

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 755

C语言判断大小端

大小端介绍 中央处理器(CPU:CentralProcessingUnit)和微处理器(MCU:MicrocontrollerUnit)中的存储单元都有存储单元,用来存放程序代码中申请的变量(存在栈区),CPU/MCU的最小存储单元是一1个字节(1Byte)即8bit。 C语言中有多种变量类型如:char(8bit)、short(16bit)、int(32bit)、long long(64bit),其中char类型刚好是一个最小存储单元的大小,那么char型变量就用一个存储单元来存放;但是short、int

qq_43613467的博客 2408

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【C语言】 - 大小端(详细讲解)

什么是大小端,大小端作用,如何判断大小端

2301_79755897的博客 2303

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言翻转大小端

在C语言中实现通用化数字大小端转换

Micky613的博客 496

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c语言大小端序怎么判断,C语言验证大小端的几个方法

原标题:C语言验证大小端的几个方法大小端的问题在很多面试笔试中都会遇到,最直接的考察是,笔试的时候,让你写一个代码,如何确定当前系统是大端还是小端的。什么是大端和小端呢?大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(CPU对操作数的存放方式是从高字节到低字节)小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(CPU对操作数的存放方式是从低字节到高字节)假设我...

weixin_28454475的博客 998

c语言中union测试大小端,c语言:union,大小端

union:不允许只用联合变量名作赋值或其它操作。也不允许对联合变量作初始化赋值,赋值只能在程序中进行。小端存储:以字节为单位,低存低,高存高。任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的 short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100。由于Intel ...

weixin_42498909的博客 612
上一篇: C中的volatile用法
下一篇: mips嵌入式平台下加入3G无线上网卡功能的移植(一)
wslong
博客等级 码龄18年 6粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值