首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教一个char* 的有关问题

2012-05-28 
请问一个char* 的问题?C/C++ codeif((*buffer++)0xff){printf(此非jepg图片\n)}为什么buffer第一数据

请问一个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码。
[解决办法]
探讨

引用:

如果你的buffer定义是char *buffer,那它是不可能有0xff这么大的值的。它的最大值也不过才0x7f而已。

比较的时候它们都被看做int了,请问这时候什么原理的呀?
我记得在以前书上看过,但是想不起来了,可以指导一下吗?

[解决办法]
这个问题不错哈,学习了
[解决办法]
探讨

引用:

如果你的buffer定义是char *buffer,那它是不可能有0xff这么大的值的。它的最大值也不过才0x7f而已。

比较的时候它们都被看做int了,请问这时候什么原理的呀?
我记得在以前书上看过,但是想不起来了,可以指导一下吗?

[解决办法]
建议版主应该推荐该帖!
[解决办法]
四楼+1,有符号的会扩展符号位,无符号的不会扩展,具体的忘了,LZ可以写了简单的程序看一下差别
[解决办法]
混合数据类型时,窄的自动向宽的数据类型转 
一般情况下,有符号的向无符号的转

热点排行