大端字节序和小端字节序

不同的系统,对于存储的内容的高字节,可能分别放在物理地址的高地址或低地址。

我们可以简单地将内存看成是线性的连续地址。

对于高字节存放在低地址的字节序,称为大端字节序。网络字节序就是大端字节序。

反之,高字节存放在低地址的字节序,称为小端字节序。

bool isLittleEndian()
{
    int i = 1;
    char *a = (char*)&i;
    return *a;// 若true 小端字节序;反之 大端字节序
}

例子:

#include <iostream>
using namespace std;

union Test
{
    int a;
    short b;
};

int main()
{
    Test test;
    test.a = 0x01020304;

    cout << test.b << endl;
    return 0;
}

// 对于小端字节序  输出772(0x0304)
// 对于大端字节序  输出258(0x0102)

原文地址:https://www.cnblogs.com/jobshunter/p/10976516.html

时间: 2024-08-05 09:08:25

大端字节序和小端字节序的相关文章

理解字节序 大端字节序和小端字节序

1. 计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian). 举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11. 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法. 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存. 同理,0x1234567的大端字节序和小端字节序的写法如下图. 2. 我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?

大端字节序和小端字节序之分

我们知道关于字节序有大端和小端之分.一般来说,Inter的处理器使用的是小端(little Indian),Moto的处理器使用的是大端.大端和小端的区别在于,内存对于变量的存放规则不同.小端存储模式是低位放在低地址,高位存放在高地址.而大端则相反. 简单示例如下: a=0x11223344: 低                                                             高 地址由低到高--------------------> 小端字节序    

编程判断大端字节序和小端字节序

代码一:联合体union的存放顺序是所有成员都从低地址开始存放,若处理器是Big_endian(从高字节到低字节存放数据)的,则返回0:若是Little_endian(从低字节到高字节存放数据)的,则返回1. int checkCPU() { union w { int a; char b; } c; c.a = 1; return (c.b == 1); } 代码二: #include <stdio.h> #include <stdlib.h> int main() { int

检查机器是大端字节序还是小端字节序

#include<stdio.h>int check_sys(){ int a = 0x11223344; char *p = (char *)&a; if (*p == 0x11)  return 1; if (*p==0x44)  return 0;}int main(){ int ret; ret = check_sys(); if (ret == 1)  printf("big\n"); if (ret == 0)  printf("little\

小端字节序与大端字节序

端模式分为:小端字节序和大端字节序,也就是字节在内存中的顺序. 小端字节序:低字节存于内存低地址:高字节存于内存高地址.如一个long型数据0x12345678 0x0029f458 0x78 0x0029f459 0x56 0x0029f45a 0x34 0x0029f45b 0x12 在以上数据存放于内存中的表现形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b, 可以知道内存的地址是由低到高的顺序:而数据的字节也是由低到高的,

小端字节序和大端字节序

端模式分为:小端字节序和大端字节序,也就是字节在内存中的顺序. 需要注意的是,对于数据来说,高字节是指最高位字节,即左边第一位! 小端字节序:低字节存于内存低地址:高字节存于内存高地址.如一个long型数据0x12345678 0x0029f458 0x78 0x0029f459 0x56 0x0029f45a 0x34 0x0029f45b 0x12 在以上数据存放于内存中的表现形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b,

C/C++学习笔记---高地址、低地址、大段字节序、小段字节序

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序. 小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处: 大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处. 高.低字节 一般PC是低字节序,如果按平时书写习惯,从左到右是高位到地位的顺序,则例如0X12345678,在内存中的情况是 高地址 12 34 56 78 低地址 高地址:内存地址可以对应十六进制的数值,值大的为高地址,否则为低地址: 3. 总结    整数类型内部

内存对齐,大端字节 &nbsp; 序小端字节序验证

空结构体:对于空结构体,就是只有结构体这个模子,但里面却没有元素的结构体. 例: typedef struct student { }std: 这种空结构体的模子占一个字节,sizeof(std)=1. 柔性数组: 结构体中最后一个元素可以是一个大小未知的数组,称作柔性数组成员,规定柔性数组前面至少有一个元素. typedef struct student { int i; char arr[];     //柔性数组成员 }std: sizeof(std)=4; sizeof求取该结构体大小是

【原创】大端和小端字节序的细节

这已经是一个被说得很烂的一个话题了,今天我想在这一篇文章补充一些细节上的东西,供备忘! 在看这篇文章之前,请先仔细看下链接这篇博文,关于字节序说得很详细!http://blog.chinaunix.net/uid-25367385-id-188322.html 在今天,碰到了这样一条语句: #define get16bits(d) (*((const uint16_t *) (d))) 很明显宏参数d必须是一个指针,它可以是位数大于等于16位的类型指针,short int.long int,甚至