读书人

一个手机上赋值有关问题大家帮帮忙。

发布时间: 2012-02-26 20:19:44 作者: rapoo

一个手机上赋值问题,大家帮帮忙。。。还在加班呢
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;

读书人网 >C语言

热点推荐