Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1170490
  • 博文数量: 173
  • 博客积分: 4048
  • 博客等级:
  • 技术积分: 2679
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-12 18:53
文章分类

全部博文(173)

文章存档

2018年(1)

2016年(1)

2013年(1)

2012年(118)

2011年(52)

分类: C/C++

2011-11-22 14:55:06

如果要用4个单字节字符变量来填充1个整型变量可以这样做:
  1. int a=0;
  2. char b[4];
  3. for(j=0; j<4; j++)
  4. {
  5.     a |= b[j]<<(8*j);
  6. }
但这样做结果是不对的,因为b为char类型数组,为有符号数。而a为整型,因此b[j]首先会进行符号位扩展。
如果b[j]的高位为1,则在左移之前首先将高字节都扩展为ff。因此最终结果不正确。
将数组b定义为无符号字符数组即可:
  1. int a;
  2. unsigned char b[4];
  3. for(j=0; j<4; j++)
  4. {
  5.     a |= (b[j])<<(8*j);
 
阅读(2063) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~