大头小头字节序

何为小头序?

#include<iostream>
#include<stdio.h>
using namespace std;
int main() {
    FILE*file = fopen("haha.txt", "wb");
    short x = 256;
    fwrite(&x, sizeof(x), 1, file);
    fclose(file);
    file = fopen("haha.txt", "rb");
    char c;
    fread(&c, sizeof(c), 1, file);
    cout << (int)c << endl;
    fread(&c, sizeof(c), 1, file);
    cout << (int)c << endl;
    return 0;
}

如上代码输出为0,1.我往文件中写了一个short类型的256,低位在低地址,高位在高地址,这就是小头字节序。即小头在前面。
反之,如果高位在低地址,低位在高地址,则为大头字节序。

实际上,大头序比小头序更容易程序处理。

    file = fopen("haha.txt", "rb");
    char c;
    int n=0;
    for(int i=0;i<4;i++){
        fread(&c,sizeof(c),1,file);
        n=(n<<8)|c;
    }

谁用大头序?

java平台二进制读取一律采用大头字节序,网络上数据传输也都采用大头字节序,因为它好处理呀!

c++不跨平台,所以它的大小头依赖于系统架构,intel系列通常是小头字节序(intel虽然用的很广,却设计的不合理),arm体系通常是大头序列。

网络上通常采用大头字节序,所以大头字节序又叫网络字节序。

intel占据大量PC,都采用小头字节序,所以小头字节序又叫主机字节序。

public class Main {
    public static void main(String[] args) throws IOException {
        DataOutputStream o = new DataOutputStream(new FileOutputStream("haha.txt"));
        o.writeInt(12332);
        o.close();
        DataInputStream i = new DataInputStream(new FileInputStream("haha.txt"));
        int n = 0;
        for (int j = 0; j < 4; j++) {
            n = (n << 8) | i.read();
        }
        System.out.println(n);//程序输出12332
    }
}
时间: 2024-08-01 22:32:38

大头小头字节序的相关文章

linux kernel如何处理大端小端字节序

最近在做将kernel由小端处理器(arm)向大端处理器(ppc)的移植的工作,现在kernel进入console稳定工作,基本工作已经完成,不过移植中有很多心得还是需要总结下,今天先将kernel对于大小端字节序的处理来总结下. 之前写过大小端字节序的思考,文章链接地址:http://blog.csdn.net/skyflying2012/article/details/42065427. 根据之前的理解,字节序可以认为是处理器主观的概念,就像人如何去看待事物一样,处理器分大端和小端,对于内存

小端字节序与大端字节序

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

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

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

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

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

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

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

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

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

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

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

小端字节序和大端字节序

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

大端字节序和小端字节序

不同的系统,对于存储的内容的高字节,可能分别放在物理地址的高地址或低地址. 我们可以简单地将内存看成是线性的连续地址. 对于高字节存放在低地址的字节序,称为大端字节序.网络字节序就是大端字节序. 反之,高字节存放在低地址的字节序,称为小端字节序. bool isLittleEndian() { int i = 1; char *a = (char*)&i; return *a;// 若true 小端字节序:反之 大端字节序 } 例子: #include <iostream> using