zoukankan      html  css  js  c++  java
  • 计算机大端小端存储理解

    #include <iostream>
    
    // (short)(x) & (short)0x00ffU 的结果再左移8位<< 8 ,即取低8位再左移8位后变为高8位
    // (short)(x) & (short)0xff00U 的结果再右移8位>> 8 ,即取高8位再右移8位后变为低8位
    #define sw16(x) (short) ( ((short)(x) & (short)0x00ffU ) << 8 | ((short)(x) & (short)0xff00U)>>8 )
    
    using namespace std;
    
    int main() {
        //0x十六进制2位数占用一个字节(一个字节即8位bit)
        //计算机内存分配是以字节为单位的,比如只申请1位bit会给你分配一个字节即8位哦
        //所以对于内存分配,我们只谈字节不谈位。对于按位计算才考虑位bit。
        //unsigned int 有4个字节空间
        unsigned int value = 0x12345678;//0x12一个字节,0x34一个字节,0x56一个字节,0x78一个字节
    
        unsigned char buf[4] = {0};//申请4个字节
        //大端:低地址存放高字节
        buf[0] = 0x12;/*0x12高字节*/
        buf[1] = 0x34;
        buf[2] = 0x56;
        buf[3] = 0x78;
        printf("大端buf结果:0x%x%x%x%x
    ", buf[0], buf[1], buf[2], buf[3]);
    
        //小端:低地址存放低字节
        buf[0] = 0x78;/*0x78低字节*/
        buf[1] = 0x56;
        buf[2] = 0x34;
        buf[3] = 0x12;
        printf("小端buf结果:0x%x%x%x%x
    ", buf[0], buf[1], buf[2], buf[3]);
    
        short int x;//2个字节
        char x0, x1;
        x = 0x1122;
        //数据寻址时用的都是低位字节的地址,即从0号地址开始数据寻址。
        x0 = ((char *) &x)[0]; //低地址单元,需要转为(char*)指针再取值不然指针步长不正确
        x1 = ((char *) &x)[1]; //高地址单元,同样需要转为(char*)指针再取值。指针步长才正确。
        printf("x0=x%x
    ", x0);//低地址单元,我的计算机输出结果是低字节0x22,所以是低地址存放低字节,是大端存储。
        printf("x1=x%x
    ", x1);//我的计算机输出结果是高字节0x11
        printf("大小端转化前x的值=x%x
    ", x);
        printf("大小端转化后x的值=x%x
    ", sw16(x));
        return 0;
    }
    
  • 相关阅读:
    从屏幕截取一块区域,将其赋给imageView
    oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
    UIPopoverController
    IOS-- UIView中的坐标转换
    TCP、UDP的区别
    TCP/IP协议简单介绍
    NSTimer类的使用
    UI基础-网络编程
    IOS面试中的一些问题
    iOS开发UI篇—UITabBarController简单介绍
  • 原文地址:https://www.cnblogs.com/yongfengnice/p/14434147.html
Copyright © 2011-2022 走看看