📄 pcm8.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
FILE *rfp,*wfp,*fpa,*fpb;
unsigned char Xn,Dn,Sn=0,Yn,Dqn,Xen=0x80;
bool flags;
unsigned char Two_Yn;
void Encode();
void Decode();
void main()
{
if ((rfp = fopen("f:\\project\\vb\\ad\\monkey.pcm","rb")) == NULL)
{
printf("Cannot open file 123.pcm\n");
exit(-1);
}
if ((wfp = fopen("f:\\project\\vb\\ad\\mmp.dat","w")) == NULL)
{
printf("Cannot open file mmp.dat\n");
exit(-1);
}
if ((fpa = fopen("f:\\project\\vb\\ad\\monkeyp.dat","wb")) == NULL)
{
printf("Cannot open file monkey.dat\n");
exit(-1);
}
if ((fpb = fopen("f:\\project\\vb\\ad\\monkeyp.yn","wb")) == NULL)
{
printf("Cannot open file monkeyp.yn\n");
exit(-1);
}
long i=1;
fprintf(wfp," ID Xn Xen Yn Dn Sn Dqn \n");
Xn=fgetc(rfp);
flags = true;
while(!feof(rfp))
{
Encode();
printf("%5x",Xen);
fprintf(wfp,"%5x%5x%5x%5x%5x%5x%5x\n",i,Xn,Xen,Yn,Dn,Sn,Dqn);
fputc(Yn,fpb);
if (flags)
{
Two_Yn = Yn << 4;
flags = false;
}
else
{
Two_Yn=(Two_Yn & 0xf0) + (Yn & 0x0f);
flags= true;
fputc(Two_Yn,fpa);
}
Xn=fgetc(rfp);
i++;
}
if (!flags)
{
Two_Yn=Two_Yn & 0xf0;
fputc(Two_Yn,fpa);
}
fclose(rfp);
fclose(wfp);
fclose(fpa);
fclose(fpb);
if ((rfp = fopen("f:\\project\\vb\\ad\\monkeyp.dat","rb")) == NULL)
{
printf("Cannot open file monkey.dat\n");
exit(-1);
}
if ((wfp = fopen("f:\\project\\vb\\ad\\monkeyp.dec","wb")) == NULL)
{
printf("Cannot open file monkey.dec\n");
exit(-1);
}
Sn=0;
Xen=0x80;
Yn=fgetc(rfp);
while(!feof(rfp))
{
Two_Yn = Yn;
Yn = (Yn & 0xf0) >> 4;
Decode();
fputc(Xen,wfp);
Yn = Two_Yn & 0x0f;
Decode();
fputc(Xen,wfp);
Yn=fgetc(rfp);
}
fclose(rfp);
fclose(wfp);
}
void Encode()
{
bool fDs = (Xn < Xen) ? 1:0;
Dn = (fDs) ? (Xen-Xn):(Xn-Xen);
unsigned char nY;
if(Sn>0)
{
nY=Dn >> Sn;
}
else
nY=Dn;
if(nY>7)nY = 7;
Yn=nY+(fDs << 3);
Decode();
}
void Decode()
{
bool fYs = (Yn & 0x08) ? 1:0;
unsigned char nYmag = Yn & 0x07;
unsigned char nDmag = nYmag << Sn;
Dqn = nDmag;
if(nYmag ==7)
{
if(Sn != 5) Sn += 1;
}
else if(nYmag == 0)
{
if(Sn != 0) Sn -= 1;
}
Xen = (fYs) ? (Xen-Dqn):(Xen+Dqn);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -