今天有个学弟问了一个问题,怎么提取int中的高八位。

这个是个非常基础的问题,随便用位运算瞎搞几下就出来了。

看到这个问题的时候,也不知道我当初想了些啥,想了个骚操作,用memcpy把int放到字符串里。。承认吧,你就是个毒瘤。ヾ(・ω・`。)

实现方法如下

#include <cstdio>
#include <cstring>
int main(){
int a = 0xaabbccff;
char ch[];
memcpy(ch, &a, ); 
for(int i = ; i < ; i++){
printf("ch[%d]=%#x ", i, 0xff & ch[i]);
/* %x会强制转换ch[i]为int类型,如果第一个字节为1会前补1,所以只取低八位即可 */
/* OUTPUT :
       ch[0]=0xff ch[1]=0xcc ch[2]=0xbb ch[3]=0xaa
     */
}
return ;
}

但是我跟学弟说的取高八位直接取ch[0],从输出结果看,我的答案应该是错的,一下子没有想通为什么。

后面才知道是字节序。仿佛触及到了我的知识盲区了(你本来就是个什么都不懂的菜鸡),就去查了一下。

其实总共就下面几句话:

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。

大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。

小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。

举个例子

#include <cstdio>
#include <cstring>
int main(){
int a = 0xaabbccdd;
char c;
c = a;
printf("%#x\n", 0xff&c);
/* OUTPUT:
0xdd
*/
}

但是有些cpu并不是严格按照小端字节序进行处理数据的,所以,我这个毒瘤方法虽然可以提取出每个字节的值,但是在不同机器上取值的下标可能不一样,所以并不能适用。

最新文章

  1. chrome中hack解决input:-webkit-autofill自定义样式
  2. 获取Mac地址
  3. LeetCode - 49. Group Anagrams
  4. iOS开发之音频口通信-通过方波来收发数据
  5. 微信多媒体上传图片,创建卡券上传 LOGO
  6. H3C S5000和H3C S5500,俺来罗
  7. python处理mysql慢查询日志
  8. 用Doxygen生成文档
  9. Private Members in JavaScript
  10. Spring HTTP invoker 入门
  11. css两列布局,一边固定宽度,另一边自适应
  12. 把HTML5网页封装成APP,APK的方法
  13. session深入解读
  14. vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)
  15. js中非死循环引起的栈调用溢出问题
  16. MinerDB.java 数据库工具类
  17. 【原创】qlogic网卡软中断不均衡问题分析
  18. JS与CSS阻止元素被选中及清除选中的方法总结
  19. python - format函数 /class内置format方法
  20. C#基础第三天-作业答案-集合-冒泡排序-模拟名片

热门文章

  1. 提取全局应用程序集中的dll
  2. 第二篇【Zabbix客户端的完整布署】
  3. Linux设置程序开机自启动,系统命令chkconfig及linux /etc/rc.d/目录的详解
  4. js 引号 转义字符 json字符串
  5. CSS3 的动画属性
  6. XML的树结构与语法规则
  7. python 文件定位
  8. 一些简单题(2)(Source : NOIP历年试题+杂题)
  9. java和python实现一个加权SlopeOne推荐算法
  10. sklearn可实现的函数或者功能可分为如下几个方面