#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++)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)