IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【计算机基础】字节序 -> 正文阅读

[C++知识库]【计算机基础】字节序

字节序

计算机最小的存储单位是 位(Bit),但是,计算机中最基本的存储单位是字节(Byte)

1 Byte = 8 Bit

计算机在存储大于1字节的数据时,会将这个数据拆分为多个字节,再将它们按顺序存储起来,存储和读取这些字节的顺序,就是字节序

定义

字节序(Endianness),即计算机在存储或读取数据时,字节的顺序。

分类

字节序分为 大端序(Big endian)小端序(Little endian)

  • 大端序:高位字节在前,低位字节在后。
  • 小端序:低位字节在前,高位字节在后。

img

上图转自阮一峰老师的博客


人读写数字的顺序就是大端序,人在读(写)数字时,总是先读(写)高位,再读(写)低位。

例如:对于数字520

  • 在写数字的时候,先写5,再写2,最后写0
  • 在读数字的时候,先读5,再读2,最后读0

而在计算机的存储中,一般都是小端序存储。

同时,还有主机序和网络序的概念:

  • 主机序小端序
  • 网络序大端序

实战(基于C语言)

  1. 判断计算机是大端序还是小端序

    #include <stdio.h>
    
    union {
    	short a;
    	char b[2];
    } un;
    
    int main()
    {
    	un.a = 0x1234;
    	if(un.b[0] == 0x34)
    	{
    		printf("小端序"); 
    	}
    	else if(un.b[0] == 0x12)
    	{
    		printf("大端序");
    	}
    	 
        return 0;
    }
    

    说明

    C语言中,short是16位整数,所以会被拆成两个字节存储,我们将一个short类型的整数赋值为0x1234,如果它先存储0x34(即它的低位字节),就是小端序;反之,如果它先存储0x12(即它的高位字节),就是大端序。

  2. 利用指针转换字节数组和基本类型

  • 字节数组转short(单个数字)

    #include <stdio.h>
    
    int main()
    {
    	char chs[2] = {0x34, 0x12}; // 小端序数据0x1234
    	
    	short a = *((short*)chs);
    	
    	printf("0x%X", a); // 输出0x1234
        
        return 0;
    }
    
  • 字节数组转short(多个数字)

    #include <stdio.h>
    
    int main()
    {
    	char chs[4] = {0x34, 0x12, 0x78, 0x56}; // 小端序数据0x1234, 0x5678
    	
    	short a = *((short*)chs);
    	short b = *((short*)(chs+2));
    	
    	printf("0x%X \n", a); // 输出0x1234
        printf("0x%X \n", b); // 输出0x5678
        
        return 0;
    }
    
  • short转字节数组

    #include <stdio.h>
    
    int main()
    {
    	char chs[2];
    	short a = 0x1234;
    	
    	for(int i = 0; i < 2; i++)
    	{
    		chs[i] = ((char*)&a)[i];
    	}
    	
        // 小端序计算机将输出: chs[0]=0x34, chs[1]=0x12
    	printf("chs[0]=0x%X \n", chs[0]);
    	printf("chs[1]=0x%X \n", chs[1]);
        return 0;
    }
    
  1. 利用联合体转换字节数组和基本类型

    #include <stdio.h>
    
    union {
    	short a;
    	char chs[2];
    } un;
    
    int main()
    {
    	//将short转换为字节数组// 
    	un.a = 0x1234; 
    	
    	// 小端序计算机将输出: chs[0]=0x34, chs[1]=0x12
    	printf("chs[0]=0x%X \n", un.chs[0]);
    	printf("chs[1]=0x%X \n", un.chs[1]);
    	
    	
    	//将字节数组转换为short// 
    	un.chs[0] = 0x78;
    	un.chs[1] = 0x56;
    	printf("a=0x%X \n", un.a); // 输出0x5678 
    	
        return 0;
    }
    
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:34:54  更:2021-11-17 12:35:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:55:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码