请问一个char* 的问题?
- C/C++ code
if((*buffer++)==0xff) { printf("此非jepg图片\n"); }
为什么buffer第一数据是0xff,但是printf却不会打印,但是改成这样却会打印:
if(((unsigned char)*buffer++)==0xff)
{
printf("此非jepg图片\n");
}
还有我代码:这里也会打印数据
- C/C++ code
char * p="123456"; if(*p++==0x31) { std::cout<<"对"<<std::endl; }
请问下第一种写法为什么不能够打印数据呀?
[解决办法]
如果你的buffer定义是char *buffer,那它是不可能有0xff这么大的值的。它的最大值也不过才0x7f而已。
[解决办法]
它是存储着,问题在于你比较的时候它们都被看做int了。buffer里的被认为是-1,而常数里的被认为是255。这能相等吗?
[解决办法]
楼主看下这段代码:
- C/C++ code
#include<stdio.h>int main(){ char *Buffer = new char; *Buffer = 0xff; printf("%d\n", *Buffer);//输出 -1,默认是为有符号数,最高位为符号位,计算机内数据以补码表示。 printf("%d\n", (unsigned char)*Buffer);//输出 255,强制转为无符号数。 delete Buffer; return 0;}
[解决办法]
4楼正解。
buffer里存的是整数,不都是可显示的ASCII码。
[解决办法]
[解决办法]
这个问题不错哈,学习了
[解决办法]
[解决办法]
建议版主应该推荐该帖!
[解决办法]
四楼+1,有符号的会扩展符号位,无符号的不会扩展,具体的忘了,LZ可以写了简单的程序看一下差别
[解决办法]
混合数据类型时,窄的自动向宽的数据类型转
一般情况下,有符号的向无符号的转