关于LPSTR 跟 char 赋值与应用的区别
关于LPSTR 和 char 赋值与应用的区别
今天突然发现一个问题,在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.
}
请各位大大解疑答惑!感激不尽!
------解决方案--------------------
*temp是一个字符串的地址,255不知道指向哪里去了
------解决方案--------------------
255=0xFF=-1
用无符号表示是255
用有符号表示是-1
对*temp指向的地方始终保存了0xFF
你非要用有符号方式显示出来,当然是-1
你要看存储器的数据
用%X就可以了
------解决方案--------------------
首先分清楚char和unsigned char
之后考虑大小端的问题。
------解决方案--------------------
今天突然发现一个问题,在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
------解决方案--------------------
*temp是一个字符串的地址,255不知道指向哪里去了
------解决方案--------------------
255=0xFF=-1
用无符号表示是255
用有符号表示是-1
对*temp指向的地方始终保存了0xFF
你非要用有符号方式显示出来,当然是-1
你要看存储器的数据
用%X就可以了
------解决方案--------------------
首先分清楚char和unsigned char
之后考虑大小端的问题。
------解决方案--------------------