美文网首页
cpu 字节序

cpu 字节序

作者: perryn | 来源:发表于2019-11-15 16:18 被阅读0次

为什么会有字节序这一说法

  • 对于单字节处理器不存在字节序,对于大于1个字节的位数的CPU,其寄存器的宽度也大于1个字节,所以存储字节排序的问题

大端字节序排序

  • 大端:高字节位在低地址存储,低字节位在高地址存储
    -小端: 高字节位存储在高地址,低字节位存储在低地址
 例如 int  x = 0x0001,假设是在64位的CPU上,它的地址空间为:0xff13,其字节排序可能有两种可能:
  oxff13: 0  0  0  1   --->第一种情况 大端
  0xff13: 1  0  0  0   --->第二种情况 小端
在x这个值中0001从左往右是高字节位到低字节位,也就是 0,0 是高字节,0 1 是低字节位。

如何验证CPU的字节序呢?

  • C语言中有union结构,这个结构的数据存储是从低地址向高地址依次存储值,可以通过这个特性来验证CPU的字节序
/*************************************************************************
  > File Name: byte_order.c
  > Author:perrynzhou 
  > Mail:perrynzhou@gmail.com 
  > Created Time: Fri 15 Nov 2019 03:42:37 PM CST
 ************************************************************************/

#include <stdio.h>
typedef union object_t {
    int a;
    char b;
} object;
enum
{
    big_endian_type = 0,
    small_endian_type,
};
int checkCpu(object *obj)
{
    return obj->b == 1 ? small_endian_type : big_endian_type;
}
int main()
{
    int v = 0x0001;
    object obj;
    obj.a = v;
    fprintf(stdout, "value:%d,value_string:%s,object address:%p\n", v, "0x0001", &obj);
    if (checkCpu(&obj) == big_endian_type)
    {
        fprintf(stdout, "store plan: |%d|%d|%d|%d|,big endian\n", 0, 0, 0, 1);
    }
    else
    {
        fprintf(stdout, "store plan: |%d|%d|%d|%d|,small endian\n", 1, 0, 0, 0);
    }
    return 0;
}
[perrynzhou@localhost ~/Source/vivo/linux_kernel_study/chapter_01]$ ./test 
value:1,value_string:0x0001,object address:0x7ffcaf058a08
store plan: |0|0|0|1|,big endian
[perrynzhou@localhost ~/Source/vivo/linux_kernel_study/chapter_01]$ 

相关文章

  • cpu 字节序

    为什么会有字节序这一说法 对于单字节处理器不存在字节序,对于大于1个字节的位数的CPU,其寄存器的宽度也大于1个字...

  • Linux socket编程:地址及转换

    1. 网络字节序与主机字节序 1.1 主机字节序() CPU的字节顺序类型, 小端,little endian; ...

  • Big Endian与Little Endian字节存储顺序

    不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序。分为小端格式和大端格式(Little-End...

  • 小端格式和大端格式(Little-Endian&Big-Endi

    不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序。 最常见的有两种: 1. Little-en...

  • iOS 关于socket通讯中字节序

    不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序最常见的有两种 1. 主机字节...

  • Linux的socket API基本操作

    1.socket地址API 主机字节序和网络字节序 字节序分为大端字节序和小端字节序 大端字节序 = 一个整数的高...

  • C语言字节序转换API

    主机字节序转网络字节序 网络字节序转主机字节序 将字符串IP地址转换为网络字节序的整型数据 将网络字节序数据转换为...

  • 内存序、字面量、动态规划

    内存字节序 确认内存字节序 /* 确定你的电脑是大端字节序还是小端字节序 */include int check...

  • socket编程基础

    字节序 字节序分为大端字节序和小端字节序大端字节序: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内...

  • 深入理解Emoji(二) —— 字节序和BOM

    上篇主要了解了字符集和字符集编码的相关知识,其中有提到字节序的问题,这篇我们便深入探讨下这方面的知识。 字节序 字...

网友评论

      本文标题:cpu 字节序

      本文链接:https://www.haomeiwen.com/subject/otchictx.html