首页 > 编程语言 >C++大端与小端

C++大端与小端

时间:2022-10-15 20:46:28浏览次数:49  
标签:小端 Little 顺序 字节 Big C++ 地址 Endian 大端

字节序:字节顺序又称端序或尾序(Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。

在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在 C 语言中,一个类型为 int 的变量 x 地址为 0x100,那么其对应地址表达式 &x 的值为 0x100,x 的四个字节将被存储在电脑内存的 0x100,0x101,0x102,0x103 位置。

字节的排列方式常见的方式有两种:将一个多位数的低位放在较小的地址处,高位放在较大的地址处,则称小端序(Little-Endian);反之则称大端序(Big-Endian)。

 在网络应用中字节序是一个必须被考虑的因素,对于不同 CPU 可能采用不同标准的字节序,所以均按照网络标准转化成相应的字节序。

Little-Endian:将低序字节存储在起始地址(低位编址),在变量指针转换的时候地址保持不变,比如 int64* 转到 int32*,对于机器计算来说更友好和自然。

Big-Endian:将高序字节存储在起始地址(高位编址),内存顺序和数字的书写顺序是一致的,对于人的直观思维比较容易理解,网络字节序统一规定采用 Big-Endian。

检测字节序:一般情况下我们直接调用宏定义 __BYTE_ORDER 即可,可以通过引用 <bits/endian.h> 即可。或者我们也可以编写程序来判断当前的字节序。

  • 字节序转换:
    在程序中字节序转换时,我们将高位与低位依次进行交换即可完成,以下为整数的字节序转换。

在一个n进制的位中,最左边的位叫最高有效位,最右边的叫最低有效位。

  大小端一般是由CPU架构决定的。

  网络字节序(Network Order):TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

  主机字节序(Host Order):整数在内存中保存的顺序,它遵循Little Endian规则(不一定,要看主机的CPU架构)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。

 

标签:小端,Little,顺序,字节,Big,C++,地址,Endian,大端
From: https://www.cnblogs.com/acec/p/16794313.html

相关文章

  • C/C++ 变量的四种存储类型
    所有的数据都有两种类型数据类型:如int,float等存储类型:总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。(1......
  • 【C++】统计string里面出现的字符的个数(使用count函数)
    题目:给出一个string字符串,统计里面出现的字符的个数解决方案:使用算法库<algorithm>里面的count函数(不是s.count()!!count是单独作为一个函数,而不是作为一个方法),使用方法是......
  • vs code c++ 中文乱码问题
    解决方法:在vscode下方点击编码点击重新编码,改成GB2312同时,对tasks.json中的配置,进行更改......
  • c++游戏客户端修改记录
    c++游戏客户端编译原代码是基于WTL8.0的,可能是vs2005版本编译。本次使用vs2013升级,之后主要遇到的错误记录在此,最后编译成功了项目中已经引入了wtl8的头文件到include......
  • C++关键字之likely和unlikely
    什么是likely和unlikely既然程序是我们程序员所写,在一些明确的场景下,我们应该比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU......
  • C++ Primer Plus学习笔记之开始学习C++
    前言个人觉得学习编程最有效的方法是阅读专业的书籍,通过阅读专业书籍可以构建更加系统化的知识体系。一直以来都很想深入学习一下C++,将其作为自己的主力开发语言。现在为......
  • C++ | 关联容器map通过值(Value)找键(Key)
    今天又学到了一个关于关联容器map小技巧:通过值(Value)来寻找对应的键(Key),这个功能通过std::find_if实现,代码如下template<classT,classU>TfindKeyByValue(constUVal,......
  • C/C++ 为什么要使用动态内存?
    为什么要使用动态内存?1.按需分配,根据需要分配内存,不浪费;2.被调用函数之外需要使用被调用函数内部的指针对应的地址空间;3.突破栈区的限制,可以给程序分配更多的内存......
  • C++ openCV 相关
    1.opencv的Mat矩阵Mat是opencv在C++中的一个图像容器类,可以使用Mat进行图像矩阵的定义Mat矩阵的定义#include<iostream>#include<opencv2/opencv.hpp>//定义图像......
  • C++实现太阳系行星系统
    实验楼项目:C++实现太阳系行星系统关于详细知识跟着实验做比较好基础知识做这个项目需要知道一些基础知识:OpenGLGLUT类设计main.cpp#include<GL/glut.h>#include......