今天突然发现一个问题,在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
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
用无符号表示是255
用有符号表示是-1对*temp指向的地方始终保存了0xFF
你非要用有符号方式显示出来,当然是-1你要看存储器的数据
用%X就可以了
*temp会被当个整数(32位)来看待0xFF000000,255也自然被当做0x000000FF看待
自然是不等的
首先分清楚char和unsigned char之后考虑大小端的问题。