EP8\EP9嵌入式机器的大小端-创新互联

  1. 题目

    成都创新互联公司是专业的兴国网站建设公司,兴国接单;提供成都网站制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行兴国网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中称之为大端模式(BE),而小端模式(LE)则反之。牛牛想知道牛客网的后台使用的是哪种模式,你能根据函数输入的数据判断吗?

  1. 思路

反正都只是要测试后台是大端还是小端,干脆忽略输入n的值,直接把n赋值为1,因为int有4个字节,所以可以用char去截取内存最低字节,即把n强制转换为char型(只有1个字节)。

一个地址是8个字节,n=1,如果是大端存储为0x1000 0000 如果是小端存储0x0000 0001

  1. 输入输出

输入:
1
返回值:
1
//大端模式返回数字0,小端模式返回数字1,原题目描述有错误
  1. 代码展示

int judge(int n ) {
    // write code here
    n = 1;
    return (char)n;
}

EP9嵌入式小端转大端

  1. 题目

在学习机器的大小端表示后,牛牛又对两种模式之间的相互转换感兴趣了。现在牛牛输入一个数字n,假设它是以小端模式保存在机器的,请将其转换为大端方式保存时的值。

  1. 思路

以小端模式保存的,那1就保存为0x0000 0001 转换为大端需要把最后一个字节放在最高位地址

  1. 代码展示

int convert(int n ) {
    // write code here
    return (((n & 0xff000000) >>24 )|
             ((n & 0x00ff0000) >>8  )|
             ((n & 0x0000ff00)<< 8 ) |
             ((n & 0x000000ff)<< 24));
}
//相于运算 n是int型 四个字节  16进制0xff00 0000 相当于32位二进制  
//(n & 0xff000000) >>24  最高的1个字节(ff)保留原样 向右移6位 0x0000 00ff
//(n & 0x00ff0000) >>8 n的第3个字节保留,随后向右移2位  0x0000 ff00
//(n & 0x0000ff00)<< 8 n的第2个字节保留,左移2位,0x00ff 0000
//(n & 0x000000ff)<< 24  n的第1个字节保留,左移6位,0xff00 0000
//方法二
int convert(int n ) {
    // write code here
    unsigned char a,b,c,d;
    a = (char)n; //n是int型 取四个字节的最低位
    b = (char)(n>>8);//把n的次低位移到最低位 又取
    c = (char)(n>>16);
    d = (char)(n>>24);
    //a,b,c,d都是char型 只有一个字节 存储的时候用0向左补齐 0x0000 00a  0x000 00b
    n = (a<<24)+(b<<16)+(c<<8)+d; //把a的最低位移到最高位 b的
 
    return n;

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章标题:EP8\EP9嵌入式机器的大小端-创新互联
标题来源:http://azwzsj.com/article/cdheso.html