首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个手机上赋值有关问题,大家帮帮忙。还在加班呢

2012-02-26 
一个手机上赋值问题,大家帮帮忙。。。还在加班呢aaa((*((uint16*)(pbyBase))&0x001F)*(0x0021*0x4000)&0x00F

一个手机上赋值问题,大家帮帮忙。。。还在加班呢
aaa   =   ((*((uint16   *)(pbyBase))   &   0x001F)   *   (0x0021   *   0x4000)   &   0x00FF0000);
DBGPRINTF( "aaa:%x------x   =   %d ",   aaa,x);
bb   =   (aaa   > >   16);
DBGPRINTF( "pbmDstpBmp:%x     ",   ((uint32*)(pbmDst-> pBmp))[x]);
DBGPRINTF( "bb:%x     ",   bb);
((uint32*)(pbmDst-> pBmp))[x]   =   bb;
DBGPRINTF( "pbmDstpBmp:%x     ",   ((uint32*)(pbmDst-> pBmp))[x]);


手机上测试打印出来的信息是这样的:
[TS]aaa:ce0000------x   =   0
[TS]*dbgprintf-4*   ..\..\..\src\ScrollWidget.c:2347
[TS]pbmDstpBmp:0    
[TS]*dbgprintf-4*   ..\..\..\src\ScrollWidget.c:2348
[TS]bb:ce    
[TS]*dbgprintf-4*   ..\..\..\src\ScrollWidget.c:2350
[TS]pbmDstpBmp:ce0000    
[TS]*dbgprintf-4*   ..\..\..\src\ScrollWidget.c:2354
[TS]c:ec--d:ec00--e:ec00  
[TS]*dbgprintf-4*   ..\..\..\src\ScrollWidget.c:2357
[TS]pbyBase:ce0000--


可以确保aaa是正确的,移位操作也是可行的,但是
((uint32*)(pbmDst-> pBmp))[x]   =   bb;这句话明显是不对的,因为bb是0xce,而赋过去之后就变成0xce0000了,pBmp是unsigned   char*类型。

在windows模拟器上打出来的测试信息是下面这样的:

[TS]aaa:ce0000------x   =   0

[TS]*dbgprintf-4*   D:\zhengji_view_20070702\Philips\engine\framework\xui\widgets\
src\ScrollWidget.c:2347

[TS]pbmDstpBmp:0

[TS]*dbgprintf-4*   D:\zhengji_view_20070702\Philips\engine\framework\xui\widgets\
src\ScrollWidget.c:2348

[TS]bb:ce

[TS]*dbgprintf-4*   D:\zhengji_view_20070702\Philips\engine\framework\xui\widgets\
src\ScrollWidget.c:2350

[TS]pbmDstpBmp:ce

这里就很正确,向了半天了,郁闷,有人可以告诉我为什么么?还在加班呢。。。抓狂

[解决办法]
用的ClearCase呀,真有钱呀。这样的情况你要注意
pbmDst-> pBmp的值是不是一个合法的指针就是&3==0,还有如果你bb是uchar类型的话为什么不转换成((uint8*)(pbmDst-> pBmp))[x*4] = bb;呢

[解决办法]
把这个 pbmDst-> pBmp 的实际地址输出来就知道了
[解决办法]

((uint32*)(pbmDst-> pBmp))[x] = bb;
换成
((uint32*)(pbmDst-> pBmp))[x] = (uint32*)bb;

热点排行