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;
}