求编程高手帮忙~写一段8位二进制折叠码(PCM编码器)编译码程序

求编程高手帮忙~写一段8位二进制折叠码(PCM编码器)编译码程序,第1张

#include <stdioh>

#include <conioh>

int trans(int n)

{

int r=0;

if(n<0)

{

r=r|0x80;

n=-n;

}

if(n<=16)

{

r=r|0x00;

}

else if(n<=32)

{

r=r|0x10;

}

else if(n<=64)

{

r=r|0x20;

}

else if(n<=128)

{

r=r|0x30;

}

else if(n<=256)

{

r=r|0x40;

}

else if(n<=512)

{

r=r|0x50;

}

else if(n<=1024)

{

r=r|0x60;

}

else if(n<=2046)

{

r=r|0x70;

}

else

{

return 0;

}

r=r|(n&0x0f);

return r;

}

main()

{

int n,r,i;

printf("输入一个10进制(1-2048):");

scanf("%d",&n);

if(n>=1 && n<=2048)

{

r=trans(n);

printf("8位2进制为:");

for(i=0;i<8;i++)

{

printf("%c",((r>>(8-i-1))&0x01)+'0');

}

printf("\n");

}

else

{

printf("输入错误!\n");

}

}

public static String translate(String value) {

StringBuffer result = new StringBuffer();

char[] valueChars = valuetoCharArray();

String temp = null;

for (char c : valueChars) {

if (c >= 'a' && c <= 'z') {

temp = c - 'a' + 1 + "";

if (templength() == 1) {

resultappend("0");// 补零,不然还原不回来

}

} else if (c >= 'A' && c <= 'Z') {

temp = c - 'A' + 27 + "";//应该是27刚刚26错了

} else if (c == ' ') {

temp = "";

} else {

temp = c + "";

}

resultappend(temp);

}

return resultappend("")toString();

}

刚才刚写了个霍夫曼编码的,现在又一个要译码的。其实译码要比编码简单,因为霍夫曼编码任何一个码都不是其他码的前缀,所以一旦遇到一个合法的字符,就直接输出,然后从后面接着译码就可以了。

如果根据编码生成了一颗霍夫曼树,直接沿着树的根节点一直到根的叶子节点就输出一个编码就可以了。

或者用hash表来存码表。比如 00:e 01:h 10:o 11:l,要解码的是0100111110解码出来就是hello

代码如下:

// Test2012cpp : Defines the entry point for the console application

//

#include<iostream>

#include<vector>

#include<bitset>

#include<algorithm>

#include<string>

#include<cstring>

#include<ctime>

#include<map>

#include<queue>

using namespace std;

struct codetable{

char ch;

string code;

};

string decode(string code,vector<codetable> tb)

{

map<string,char> hash;

for(int i=0;i<tbsize();i++)

{

hash[tb[i]code]=tb[i]ch;

}

int i=0;

string tmp;

string ret;

while(i<codesize())

{

tmpappend(1,code[i]);

if(hashfind(tmp)!=hashend())

{

retappend(1,hash[tmp]);

tmpclear();

}

i++;

}

return ret;

}

int main()

{

vector<codetable> ct;

codetable c;

cch='e';

ccode="00";

ctpush_back(c);

cch='h';

ccode="01";

ctpush_back(c);

cch='o';

ccode="10";

ctpush_back(c);

cch='l';

ccode="11";

ctpush_back(c);

cout<<decode("0100111110",ct)<<endl;

return 0;

}

PrivateSubForm_click()Dimx%,y%,s%,i%x=Val(InputBox("x="))y=Val(InputBox("y="))Fori=xToys=s+Fac(i)NextPrintsEndSubFunctionFac(n)Dimi%Fac=1Fori=1TonFac=FaciNextEndFunction

AMI编码VHDL程序

library  ieee;

use  ieeestd_logic_1164all;

use  ieeestd_logic_unsignedall;

entity ami  is

port(clk:in bit;

input:in bit;

output1:out bit;

output2:out bit);

end ami;

architecture a of ami is

begin

process(clk)

variable c:bit:='0';

begin

if clk'event and clk='1‘ then

if input='1‘ then

if c='0‘ then

output1<='1';

output2<='0';

c:=not c ;

else

output1<='0';

output2<='1';

c:=not c ;

end if;

else

output1<='0';

output2<='0';

end if;

end if;

end process;

end a;

AMI译码程序

library ieee;

use ieeestd_logic_1164all;

use ieeestd_logic_unsignedall;

entity amiym is

port(clk:in bit;

input1,input2:in bit;

output: out bit);

end amiym;

architecture a of amiym is

begin

process(clk)

begin

if clk'event and clk='0'then

output<=input1 or input2;

end if;

end process;

end a;

ps:因为只能传一张,我就传了编码的仿真图,译码的简单一点,你自己试试。

以上就是关于求编程高手帮忙~写一段8位二进制折叠码(PCM编码器)编译码程序全部的内容,包括:求编程高手帮忙~写一段8位二进制折叠码(PCM编码器)编译码程序、用JAVA编写程序,把一个英语句子译成数字代码。急用!!!必须用JAVA写啊!、求哈夫曼的编码译码程序(用C++)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9525498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存