📄 diskdlg.cpp
字号:
sprintf(Str,"%s%02X ",Str,Buf[i]);
if((i%16)==15)sprintf(Str,"%s\r\n",Str);
}
SetDlgItemText(IDC_EDIT1,Str);
if( num == 1 )
SoftdiskFDT(Buf,10);
else
HarddiskFDT(Buf,10);
}
//////////////////////////////////
///////////////////////////////////////////////////////////
////////////SoftdiskBPB////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskBPB(unsigned char *Buf,int n)
{
char *Str = new char[1024*n];
memset(Str,0,1024*n);
sprintf(Str," %s%s\r\n",Str,"软盘BPB:");
sprintf(Str,"%s%s",Str,"每个扇区的字节数:");
sprintf(Str,"%s%d ",Str,Buf[12]*16*16+Buf[11]);
sprintf(Str,"%s%s",Str,"每个簇的扇区数:");
sprintf(Str,"%s%d\r\n",Str,Buf[13]);
sprintf(Str,"%s%s",Str,"保留的扇区数:");
sprintf(Str,"%s%d ",Str,Buf[15]*16*16+Buf[14]);
sprintf(Str,"%s%s",Str,"FAT的个数:");
sprintf(Str,"%s%d\r\n",Str,Buf[16]);
sprintf(Str,"%s%s",Str,"根目录项数:");
sprintf(Str,"%s%d ",Str,Buf[18]*16*16+Buf[17]);
sprintf(Str,"%s%s",Str,"卷内总扇区数:");
sprintf(Str,"%s%d\r\n",Str,Buf[20]*16*16+Buf[19]);
sprintf(Str,"%s%s",Str,"介质描述字节:");
sprintf(Str,"%s%d ",Str,Buf[21]);
sprintf(Str,"%s%s ",Str,"每个FAT的扇节数:");
sprintf(Str,"%s%d\r\n",Str,Buf[23]*16*16+Buf[22]);
sprintf(Str,"%s%s",Str,"每个磁道的扇区数:");
sprintf(Str,"%s%d ",Str,Buf[25]*16*16+Buf[24]);
sprintf(Str,"%s%s ",Str,"磁头数:");
sprintf(Str,"%s%d\r\n",Str,Buf[27]*16*16+Buf[26]);
sprintf(Str,"%s%s",Str,"隐藏的扇区数:");
sprintf(Str,"%s%d\r\n",Str,Buf[29]*16*16+Buf[28]);
SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////HarddiskBPB////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskBPB(unsigned char *Buf,int n)
{
char *Str = new char[1024*n];
memset(Str,0,1024*n);
sprintf(Str," %s%s\r\n",Str,"硬盘BPB:");
sprintf(Str,"%s%s",Str,"每个扇区的字节数:");
sprintf(Str,"%s%d ",Str,Buf[12]*16*16+Buf[11]);
sprintf(Str,"%s%s",Str,"每个簇的扇区数:");
sprintf(Str,"%s%d\r\n",Str,Buf[13]);
sprintf(Str,"%s%s",Str,"保留的扇区数:");
sprintf(Str,"%s%d ",Str,Buf[15]*16*16+Buf[14]);
sprintf(Str,"%s%s",Str,"FAT的个数:");
sprintf(Str,"%s%d\r\n",Str,Buf[16]);
sprintf(Str,"%s%s",Str,"根目录项数:");
sprintf(Str,"%s%d ",Str,Buf[18]*16*16+Buf[17]);
sprintf(Str,"%s%s",Str,"卷内总扇区数:");
sprintf(Str,"%s%d\r\n",Str,Buf[20]*16*16+Buf[19]);
sprintf(Str,"%s%s",Str,"介质描述字节:");
sprintf(Str,"%s%d ",Str,Buf[21]);
sprintf(Str,"%s%s ",Str,"每个FAT的扇节数:");
sprintf(Str,"%s%d\r\n",Str,Buf[23]*16*16+Buf[22]);
sprintf(Str,"%s%s",Str,"每个磁道的扇区数:");
sprintf(Str,"%s%d ",Str,Buf[25]*16*16+Buf[24]);
sprintf(Str,"%s%s ",Str,"磁头的数目:");
sprintf(Str,"%s%d\r\n",Str,Buf[27]*16*16+Buf[26]);
sprintf(Str,"%s%s ",Str,"隐藏扇区的数目:");
sprintf(Str,"%s%d ",Str,Buf[31]*16*16*16*16*16*16+Buf[30]*16*16*16*16+Buf[29]*16*16+Buf[28]);
sprintf(Str,"%s%s",Str,"扇区总数:");
sprintf(Str,"%s%d\r\n",Str,Buf[35]*16*16*16*16*16*16+Buf[34]*16*16*16*16+Buf[33]*16*16+Buf[32]);
sprintf(Str,"%s%s ",Str,"每个FAT有几个扇区:");
sprintf(Str,"%s%d ",Str,Buf[39]*16*16*16*16*16*16+Buf[38]*16*16*16*16+Buf[37]*16*16+Buf[36]);
sprintf(Str,"%s%s",Str,"扩展标记:");
sprintf(Str,"%s%d\r\n",Str,Buf[41]*16*16+Buf[40]);
sprintf(Str,"%s%s1",Str,"文件系统版本:");
sprintf(Str,"%s%d ",Str,Buf[43]*16*16+Buf[42]);
sprintf(Str,"%s%s",Str,"根目录簇数:");
sprintf(Str,"%s%d\r\n",Str,Buf[47]*16*16*16*16*16*16+Buf[46]*16*16*16*16+Buf[45]*16*16+Buf[44]);
sprintf(Str,"%s%s",Str,"文件系统信息扇区数:");
sprintf(Str,"%s%d ",Str,Buf[49]*16*16+Buf[48]);
sprintf(Str,"%s%s",Str,"保留:");
int num(0);
int x(1);
for(int i=0;i<=11;i++)
{
num+=Buf[49+i]*x;
x*=16*16;
}
sprintf(Str,"%s%d\r\n",Str,num);
sprintf(Str,"%s%s",Str,"磁盘编号:");
sprintf(Str,"%s%d ",Str,Buf[65]);
sprintf(Str,"%s%s",Str,"保留:");
sprintf(Str,"%s%d\r\n",Str,Buf[65]);
SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////SoftdiskFAT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskFAT(unsigned char *Buf,int n)
{
char *Str = new char[1024*5*n];
memset(Str,0,1024*5*n);
sprintf(Str," %s%s\r\n",Str,"软盘FAT:");
for(int i=0;i<512*n;i++)
{
sprintf(Str,"%s%02X ",Str,Buf[i]);
if((i%16)==15)sprintf(Str,"%s\r\n",Str);
}
SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////HarddiskFAT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskFAT(unsigned char *Buf,int n)
{
char *Str = new char[1024*5*n];
memset(Str,0,1024*5*n);
sprintf(Str," %s%s\r\n",Str,"硬盘FAT:");
for(int i=0;i<512*n;i++)
{
sprintf(Str,"%s%02X ",Str,Buf[i]);
if((i%16)==15)sprintf(Str,"%s\r\n",Str);
}
SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////SoftdiskFDT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskFDT(unsigned char *Buf,int n)
{
char *Str = new char[10240*5*n];
memset(Str,0,10240*5*n);
sprintf(Str,"%s %s\r\n",Str,"软盘FDT:");
int i,j;
for (i=0,j=1; i<n*16; i++)
{
if ( Buf[i*32] < 32 || Buf[i*32] > 127 || Buf[i*32+11]==15 )
{
continue;
}
sprintf(Str, "%s%s%d%s\r\n",Str,"第",j++,"个文件:");
char name[9];
///////////输出文件名
sprintf(Str, "%s%s ", Str,"文件名:");
for(int k=0; k<8; k++)
{
sprintf(Str, "%s%02X ", Str, Buf[i*32+k]);
if( Buf[i*32+k] < 32 || Buf[i*32+k] > 127 )
continue;
name[k]=(char)Buf[i*32+k];
}
name[k]='\0';
sprintf(Str, "%s文件名:%s\r\n", Str, name);
///////////输出扩展名
for(k=0; k<3; k++)
{
name[k]=(char)Buf[i*32+8+k];
sprintf(Str, "%s%02X ", Str, Buf[i*32+8+k]);
}
name[k]='\0';
sprintf(Str, "%s扩展名:%s\r\n", Str, name);
//////////输出属性
sprintf(Str, "%s属性:", Str);
int attr = Buf[i*32+11];
if ((attr>>0)&1)
sprintf(Str, "%s写保护 ", Str);
if ((attr>>1)&1)
sprintf(Str, "%s隐藏 ", Str);
if ((attr>>2)&1)
sprintf(Str, "%s系统 ", Str);
if ((attr>>3)&1)
sprintf(Str, "%s卷标 ", Str);
if ((attr>>4)&1)
sprintf(Str, "%s子目录 ", Str);
if ((attr>>5)&1)
sprintf(Str, "%s存档", Str);
sprintf(Str, "%s\r\n", Str);
//////////输出时间
sprintf(Str, "%s时间:", Str);
int time = Buf[i*32+22] + Buf[i*32+23]*256;
sprintf(Str, "%s%02d:", Str, time>>11);
sprintf(Str, "%s%02d:", Str, (time&2047)>>5);
sprintf(Str, "%s%02d ", Str, time&31);
sprintf(Str, "%s\r\n", Str);
//////////输出日期
sprintf(Str, "%s日期:", Str);
int date = Buf[i*32+24] + Buf[i*32+25]*256;
sprintf(Str, "%s%04d-", Str, (date>>9)+1980);
sprintf(Str, "%s%02d-", Str, (date&480)>>5);
sprintf(Str, "%s%02d\r\n", Str, date&31);
sprintf(Str, "%s\r\n", Str);
//over!
}
SetDlgItemText(IDC_EDIT3, Str);
}
///////////////////////////////////////////////////////////
////////////HarddiskFDT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskFDT(unsigned char *Buf,int n)
{
char *Str = new char[1024*5*n];
memset(Str,0,1024*5*n);
sprintf(Str,"%s %s\r\n",Str,"硬盘FDT:");
int i,j;
for (i=0,j=1; i<n*16; i++)
{
if ( !(32<Buf[i*32]) && (Buf[i*32]<127) || Buf[i*32+11]==15 )
{
continue;
}
sprintf(Str, "%s%s%d%s\r\n",Str,"第",j++,"个文件:");
char name[9];
///////////输出文件名
for(int k=0; k<8; k++)
{
sprintf(Str, "%s%02X ", Str, Buf[i*32+k]);
if( Buf[i*32+k] < 32 || Buf[i*32+k] > 127 )
continue;
name[k]=(char)Buf[i*32+k];
}
name[k]='\0';
sprintf(Str, "%s文件名:%s\r\n", Str, name);
///////////输出扩展名
for(k=0; k<3; k++)
{
name[k]=(char)Buf[i*32+8+k];
sprintf(Str, "%s%02X ", Str, Buf[i*32+8+k]);
}
name[k]='\0';
sprintf(Str, "%s扩展名:%s\r\n", Str, name);
//////////输出属性
sprintf(Str, "%s属性:", Str);
int attr = Buf[i*32+11];
if ((attr>>0)&1)
sprintf(Str, "%s写保护 ", Str);
if ((attr>>1)&1)
sprintf(Str, "%s隐藏 ", Str);
if ((attr>>2)&1)
sprintf(Str, "%s系统 ", Str);
if ((attr>>3)&1)
sprintf(Str, "%s卷标 ", Str);
if ((attr>>4)&1)
sprintf(Str, "%s子目录 ", Str);
if ((attr>>5)&1)
sprintf(Str, "%s存档", Str);
sprintf(Str, "%s\r\n", Str);
//////////输出时间
sprintf(Str, "%s时间:", Str);
int time = Buf[i*32+22] + Buf[i*32+23]*256;
sprintf(Str, "%s%02d:", Str, time>>11);
sprintf(Str, "%s%02d:", Str, (time&2047)>>5);
sprintf(Str, "%s%02d ", Str, time&31);
sprintf(Str, "%s\r\n", Str);
//////////输出日期
sprintf(Str, "%s日期:", Str);
int date = Buf[i*32+24] + Buf[i*32+25]*256;
sprintf(Str, "%s%04d-", Str, (date>>9)+1980);
sprintf(Str, "%s%02d-", Str, (date&480)>>5);
sprintf(Str, "%s%02d\r\n", Str, date&31);
sprintf(Str, "%s\r\n", Str);
//over!
}
SetDlgItemText(IDC_EDIT3,Str);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -