EP8\EP9嵌入式机器的大小端-创新互联
题目
成都创新互联公司是专业的兴国网站建设公司,兴国接单;提供成都网站制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行兴国网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中称之为大端模式(BE),而小端模式(LE)则反之。牛牛想知道牛客网的后台使用的是哪种模式,你能根据函数输入的数据判断吗?
思路
反正都只是要测试后台是大端还是小端,干脆忽略输入n的值,直接把n赋值为1,因为int有4个字节,所以可以用char去截取内存最低字节,即把n强制转换为char型(只有1个字节)。
一个地址是8个字节,n=1,如果是大端存储为0x1000 0000 如果是小端存储0x0000 0001
输入输出
输入:
1
返回值:
1
//大端模式返回数字0,小端模式返回数字1,原题目描述有错误
代码展示
int judge(int n ) {
// write code here
n = 1;
return (char)n;
}
EP9嵌入式小端转大端
题目
在学习机器的大小端表示后,牛牛又对两种模式之间的相互转换感兴趣了。现在牛牛输入一个数字n,假设它是以小端模式保存在机器的,请将其转换为大端方式保存时的值。
思路
以小端模式保存的,那1就保存为0x0000 0001 转换为大端需要把最后一个字节放在最高位地址
代码展示
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://scyanting.com/article/cdheso.html