查看BMP文件的控制台程序

1.DEV 5.0

程序使用DEV 5.0开发。但由于作者的操作系统是中文的,所以使用printf打印超过ASCII码128时我会出现中文乱码。这是因为两个大于128的ASCII的WINDOWS中文系统中默认转成了GB2312的中文字符。解决的方法是,打开控制台,把当前的环境转成英文。

-----------------------------------------------------------------------------
控制台命令 |Windows控制台代码页编码 |含义    |
-----------------------------------------------------------------------------
chcp              |437                                          |美国英语|
------------------------------------------------------------------------------
chcp              |936                                          |中文GBK |
-------------------------------------------------------------------------------

chcp 的命令为: chcp 代码页。

2.WIN TC

后来重装了操作系统,在64M移动U盘中发现了WINTC这款编译器。编译、运行一下,OK。也不用改代码页了。

3.DEV 5.0代码

/*
---------------------------------------------
控制台命令 |Windows控制台代码页编码 |含义    |
----------------------------------------------
chcp       |437                     |美国英语|
----------------------------------------------
chcp       |936                     |中文GBK |
----------------------------------------------
*/
#include <stdio.h>
#include <string.h>
#define INFO_LEN 17
int main(int argc, char** argv) {
	int  ch=0;
	int  index=0;
	int  row=0;
	char chs[INFO_LEN];
	FILE *fp=NULL; 
	memset((void*)chs,0,INFO_LEN);
	fp=fopen("1.bmp","rb");
	if(fp==NULL)
	{
		printf("not exist file.\n");
		return -1;
	}
	if(index==0)
	{
		printf("%3s"," ");
		for(int i=0;i<16;i++)
		{
			printf("%02X ",i);
		}
		printf("\n");
	}
	do{
		ch=fgetc(fp);
		if(index%16==0 )
		{
			if(index!=0)
			{
				//printf(" %s\n",chs);
				printf(" ");
				for(int i=0;i<16;i++)
					putchar(chs[i]);
				printf("\n");
			}
			printf("%02X ",row++);
			memset((void*)chs,0,INFO_LEN);
		}
		printf("%02x ",ch);
		//
		if(ch>=32 &&ch <=254)
			chs[index%16]=ch;
		else if(ch>=1 && ch <=8)
			chs[index%16]=ch;
		else if(ch==9 || ch==10 || ch==13||ch==0)
			chs[index%16]=152;
		else if(ch>=14 && ch<=31)
			chs[index%16]=ch;
		else
			chs[index%16]='.';
		//
		index++;
	}while(!feof(fp));
	fclose(fp);
	return 0;
}

4.WIN TC代码

#include <stdio.h>
#include <string.h>
#define INFO_LEN 17
int main(int argc, char** argv) {
    int  i=0;
    int  ch=0;
    int  index=0;
    int  row=0;
    char chs[INFO_LEN];
    FILE *fp=NULL; 
    memset((void*)chs,0,INFO_LEN);
    fp=fopen("1.bmp","rb");
    if(fp==NULL)
    {
        printf("not exist file.\n");
        getchar();
        return -1;
    }
    if(index==0)
    {
        printf("%3s"," ");
        for(i=0;i<16;i++)
        {
            printf("%02X ",i);
        }
        printf("\n");
    }
    do{
        ch=fgetc(fp);
        if(index%16==0 )
        {
            if(index!=0)
            {
                /*printf(" %s\n",chs);*/
                printf(" ");
                for( i=0;i<16;i++)
                    putchar(chs[i]);
                printf("\n");
            }
            printf("%02X ",row++);
            memset((void*)chs,0,INFO_LEN);
        }
        printf("%02x ",ch);
        /*********************************/
        if(ch>=32 &&ch <=254)
            chs[index%16]=ch;
        else if(ch>=1 && ch <=8)
            chs[index%16]=ch;
        else if(ch==9 || ch==10 || ch==13||ch==0)
            chs[index%16]=152;
        else if(ch>=14 && ch<=31)
            chs[index%16]=ch;
        else
            chs[index%16]='.';
        /*********************************/
        index++;
    }while(!feof(fp));
    fclose(fp);
    getch();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lihongtao8209/article/details/117927302