今天突然发现一个问题,在BMP格式图像进行图像处理的时候,进行如下操作可以正常赋值:
FILE* file_pointer = fopen("src.bmp","rb");LPSTR lpSrcData = (LPSTR)malloc(lWidth*lHeight);
BITMAPFILEHEADER bmfHdr;
BITMAPINFOHEADER bmiHdr;
RGBQUAD rgbQ[256];
fread(&bmfHdr,1,sizeof(BITMAPFILEHEADER ),file_pointer);
fread(&bmiHdr,1,sizeof(BITMAPINFOHEADER ),file_pointer);
fread(&rgbQ,1,256*sizeof(RGBQUAD),file_pointer);
fread(lpSrcData,1,sizeof(lWidth*lHeight),file_pointer);LPSTR lpSrcTemp = lpSrcData;
for(i =0;i<lWidth;i++)
{
    for(j =0;j<lHeight;j++)
   {
      lpSrcTemp = (char*)lpSrcData + i*lWidth +j;
       *lpSrcTemp = 255;// 实际结果是:用UltraEdit 打开图片,数据位FF,即255
    }
}然而,在下面的测试中
int main()
{
   LPSTR test =(LPSTR) malloc(100);
   LPSTR temp = test;
   temp = test +10;
   *temp =255;
   printf("test = %d ",*temp);//结果为-1.
}请各位大大解疑答惑!感激不尽!图像处理LPSTR 和char

解决方案 »

  1.   

    *temp是一个字符串的地址,255不知道指向哪里去了
      

  2.   

    这个应该没错误吧,因为LPSTR 为char型,取值范围为-128~127,所以才出现*temp = -1.如果改为unsigned char型,就不会出问题了。现在的疑惑是,正常测试里面,LPSTR 和 char 类型变量赋值都不可能超过127,但在BMP文件赋值操作里面,LPSTR 确可以被赋值为255.版主作何解释呢?求赐教
      

  3.   

    255=0xFF=-1
    用无符号表示是255
    用有符号表示是-1对*temp指向的地方始终保存了0xFF
    你非要用有符号方式显示出来,当然是-1你要看存储器的数据
    用%X就可以了
      

  4.   

    不过还是有问题,作为条件判断时,if(*temp == 255){ // do something }不会得到执行,因为*temp变现出来的值是-1.
      

  5.   

    当然
    *temp会被当个整数(32位)来看待0xFF000000,255也自然被当做0x000000FF看待
    自然是不等的
      

  6.   

    你看看if((unsigned char)*temp==255)试试
      

  7.   


    首先分清楚char和unsigned char之后考虑大小端的问题。