汉扬编程 编程大纲 C|大端、小端字节序各自优势及判断

C|大端、小端字节序各自优势及判断

我们知道:

C|大端、小端字节序各自优势及判断

数据:高位→低位,如0x04030201,04是高位,01是低。

C|大端、小端字节序各自优势及判断

内存:低地址→高地址,如0x00000000→0xFFFFFFFF。

C|大端、小端字节序各自优势及判断

另外,计算机是按字长(如32位、64位)来访问内存数据的,而内存是按字节为单位来存储和编址的。

C|大端、小端字节序各自优势及判断

对于32位机,int = 0x04030201需要4个字节来存储,首字节(低地址)是存储04还是01呢?存储04(高位)的称为大端CPU,存储01(低位)的称为小端CPU。

C|大端、小端字节序各自优势及判断

小端字节序优势↓

大端字节序优势↓

因为字节序可能存在的问题↓

如何判断自己电脑是采用的大端还是小端?

#include <stdio.h>#include <stdlib.h>void Endian(){ int val = 0x04030201; char firstByte = *(char*)&val; printf("%x",&val); if(firstByte==0x01) printf("Little-Endian(小端):首地址存储数据的低位\\n"); if(firstByte==0x04) printf("Big-Endian(大端):首地址存储数据的高位\\n"); char* p = &firstByte;}int main(){ Endian(); int val = 0x41424344; FILE* fp; if((fp=fopen("test.txt","wb"))==NULL) return 0; fwrite(&val,sizeof(val),1,fp); fclose(fp); system("type test.txt"); //DCBA(小端CPU) if((fp=fopen("test.txt","rb"))==NULL) {printf("ss"); return 0;} unsigned char buf[1024]; if((fread(buf,sizeof(unsigned char),1024,fp))!=0) { int readVal = *(int*)&buf; printf("\\n%x\\n",readVal); // 41424344 } fclose(fp); system("pause"); return 0;}/*Little-Endian(小端):首地址存储数据的低位DCBA41424344*/

-End-

很多学C语言的人忽略的事儿,一文了解C语言内存节省方法

前言

C|大端、小端字节序各自优势及判断

首先单片机编程和计算机编程有个最大的差别就是单片机的资源非常的有限,所以在内存上面要求比普通软件开发要求更高。其次,在网络编程当中,网络数据的传输也是需要注意数据设计内存的大小的。面我总结了几种常总方法供大家参考。

C|大端、小端字节序各自优势及判断

共联体-unionunion-共联体,是C语言常用得关键字。从字面上的意思就是共同联合在一起的意思,union所有的成员共同维护一段能够内存空间,其内存的大小取决于所有成员中占用空间最大的成员。联合体的特色如下:

C|大端、小端字节序各自优势及判断

所有的union的成员及本身的地址是一样的。union的存储模型受大小端的影响。

C|大端、小端字节序各自优势及判断

大小端知识

C|大端、小端字节序各自优势及判断

大端模式(Big_endian):一个数据的高字节存储在低地址,低字节存储在高地址。其指针指向的首地址位于低地址。

小端模式(Little_endian):一个数据的高字节存储在高地址,低字节存储在低地址。其指针指向的首地址位于高地址。

位域位域可能对于初学者用得比较少,不过对于大部分参加工作的工程师应该屡见不鲜了,确实它也是我们省内存的神器。

位域是在结构体中实现的,且一个位域只能定义在同一个存储单元中。无名位域的使用,可以看下面的代码。由于位域与数据类型有关系,那么他的内存占用情况也与平台的位数相关。

结构体对齐​ 结构体对齐问题可能大部分人关注的不是很多,可能在通讯领域进行内存的copy时候接触得比较多。结构体对齐问题也是与平台相关,CPU为了提高访问内存的效率,一次性可能读取2个字节,4个字节,8个字节等,所以编译器会自动对结构体内存进行对齐。

废话不多说,代码说明一切:

算法优化算法优化其实主要是我们通过修改一些算法的实现一种效率与内存使用的一个平衡,我们都知道我们的算法都存在着复杂度的问题,我们大部分高效率的算法都是通过使用内存来换效率,也就是一种用空间换时间的概念。那么当我们内存使用有限的时候我们可以适当的用时间来换空间的方法,腾出更多的空间来实现更多的功能。还有就是尽量使用局部变量来减少全局变量的使用!

尾言如果阁下C语言比较差的,二进制都不知道是什么的同学,不妨关注下小编的专栏视频教程

《C语言51课视频教程合集》

《C语言十大新手练手项目实战》

《C语言数据结构那点事儿》基础版哦

《C++45课视频教程》

通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势,人人都可以学习的C语言课程

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6848.html

C语言 机器字节序、大小端的判断与修改

计算机大小端介绍以及数据转化

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部