想要读取超出ascii常规字符集的范围0-127怎么办? 比如字符ü 对应的ascii码应该是129,也就是十六进制81。认为是

解决方案 »

  1.   

    #include <stdio.h>
    #include <stdlib.h> 
    #include <string.h>main()
    {
    FILE *fp;
    long flen,bint[500],i;
    fp = fopen("c:\\a.txt", "rb");
        fseek(fp,0,SEEK_END);
    flen=ftell(fp);  
    fseek(fp,0,SEEK_SET);
        unsigned char *p,*s;    //定义无符号字符型变量指针,希望能从0-255读出ascii码
        p=(unsigned char*)malloc((flen+1)*sizeof(unsigned char));
    fread(p,1,flen,fp); 
    for(i=0;i<flen;i++)
    {
    if(*(p+i)==' ') //遇到空格认为是空NULL
    *(p+i)=0;
        printf("%x ",*(p+i));
    }
    printf("\n\n");
    for(i=0;i<flen;i++)
    {     
    printf("%c",*(p+i));
    }
        printf("\n\n");
        for(i=0;i<flen;i++)
    {
        bint[i]= (long)(*(p+i));
    printf("%d ",bint[i]);
    }
        
    }
      

  2.   


    可以啊,你看到的ü是字符形式,你直接用整数形式来读取就可以了啊char a, b, c;
    a = 30;
    b = 0x80;
    c = 0x81;
    CString str;
    str.Format("a = %c, b = %c, c = %c", a, b, c);//以字符形式输出
    afxMessageBox(str);
    //这个时候你只会看到a     b,c都是乱码。
    但是你这样输出:
    str.Format("a = %d, b = %d, c = %d", a, b, c);//以10进制整数输出
    afxMessageBox(str);
    //这个时候看到的就是a,b,c对应的值的10进制显示
    str.Format("a = %x, b = %x, c = %x", a, b, c);//以16进制输出
    afxMessageBox(str);
    //这个时候看到的就是a,b,c对应的值的16进制显示
      

  3.   

    谢谢各位,真不好意思,可能我没说清楚,我要读的字符是从00-ff个一共256个,现在我只能读出00-7F,这些“乱”码都放在txt里面,比如其中一个是ü,我就返回81
      

  4.   

    TXT中的字符就是这些:0      k
    0      m
    0      o
    0      q
    0      s
    0      u
    0      w
    0      y
    0       {
    0  
        }
    0       
    0       ?
    这些字符中00-7F的都可以读出
      

  5.   

    你是可以读,但是你展现的方式不对啊。
    你以unsigned char的方式来读取,然后你转换为16进制,然后转换为字符串,代码如下
    #include "stdafx.h"#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> main() 

        FILE *fp; 
        long flen,bint[500],i; 
        
        
        fp = fopen("c:\\bsmain_runtime.log", "rb"); 
        fseek(fp,0,SEEK_END); 
        flen=ftell(fp);
        fseek(fp,0,SEEK_SET);
        
        unsigned char *p,*s;    //????????????,????0-255??ascii? 
        p=(unsigned char*)malloc((flen+1)*sizeof(unsigned char)); 
        fread(p,1,flen,fp); 
        
        
        for(i=0;i <flen;i++) 
        {     
            printf("%x\t",*(p+i)); //??????
        } 
        printf("\n\n"); 
        for(i=0;i <flen;i++) 
        { 
            bint[i]= (long)(*(p+i)); 
            printf("%d ",bint[i]); 
        } 
        
    }
    我都帮你运行过了
      

  6.   

    #include <stdio.h>int main(void) 

    FILE* fp;
    unsigned char a = 129; fp = fopen("test.txt" , "wb");
    fwrite(&a , sizeof(unsigned char) , 1 , fp);
    fclose(fp); fp = fopen("test.txt" , "rb");
    fread(&a , sizeof(unsigned char) , 1 , fp);
    fclose(fp); printf("%d\n" , (int)a); return 0;
    }看看这个能不能帮助你
      

  7.   

    谢谢各位,你们说的都对!! 我理解有问题了,非常感谢wutaihua等朋友。这些数据的来源都是超级终端,它本身就不识别后128位ASCII码,所以它都用?来表示,也就是3F。
      

  8.   


    都不好意思继续问了,不知道你们能不能看到图片,上面我贴的数据:
    0      k 
    0      m 
    0      o 
    0      q 
    0      s 
    0      u 
    0      w 
    0      y 
    0      { 
    0  
        } 
    0       
    0      ? 
    最后一行的“?”不是真正的问号,不是十六进制3F,而应该是十六进制81,但是显示为“?”问号。那个TXT中后面还有很多,凡是“?”问号,它都认为是十六进制3F。  TXT中有很多.......,其实不是黑点,但是一些其他的字符,比如NUL和SOH,都显示为黑点,但是这个就能正确地反映出来,0 和1。 TXT中还有乱七八糟的汉字,也都能正确地显示