python3z的默認編解碼
1. MATLAB: 數字通信系統信道編碼 AMI 編譯碼
程序如下,現在原始序列長度20的隨機0,1串,要變自己改。
clc;
clear;
source = randint(1,20);
%%%%%%%%%%%% Encode %%%%%%%%%%%%%
perbit = -1;
for i=1:length(source);
if source(i)==1
encoded(i) = (-1)*perbit;
perbit = encoded(i);
else
encoded(i) = source(i);
end
end
%%%%%%%%%%%% Decode %%%%%%%%%%%%
for i=1:length(source);
if encoded(i)~=0
decoded(i) = 1;
else
encoded(i) = 0;
end
end
source
encoded
decoded
2. python最好IDE Pycharm使用小技巧總結
Python最好IDE:Pycharm使用小技巧總結:
1、pycharm的設置
從file下的setting進入設置,
然後我們進入到設置界面,首先我們可以設置界面的風格和工具欄字體大小,如紅線所示
接下來我們一般會設置寫代碼時的字體風格,選擇合適的字體和大小以及間隔,有利於編寫程序時的心情舒暢,寫起來一溜溜的。。。
接下來我們需要指定我們的編碼形式,這樣有利於我們的代碼編譯書寫
畢竟utf-8編解碼模式符合中國人的編碼習慣,再接下來我們希望在每次寫代碼時可以在文件頭寫上一些關於本文件的信息,例如時間、編譯器等等,這樣我們可以編寫一個書寫
template,這樣每次新建一個文件會自動在文件頭為我們添上這些信息,這里以py文件為例,可以照著這個模式來寫
為了方便,我就講它們直接敲出來了,可以直接復制啦!
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:albert time:${DATE}
接下來就是重頭戲,我們需要指定編譯器,這才是靈魂操作,
2、pycharm使用和快捷鍵
在pycharm里可以載入python使用的第三方庫,只要在指定編譯器後,點擊右邊的加號,進入搜索框找到你要載入的第三方庫即可,但是這種方式太慢了,一般我們在終端用pip結合鏡像來安裝,所以在這里就不做詳細說明。
至於快捷鍵,不同版本的可能略微有區別,常用的幾個:
注釋:選中後 Ctrl + /
定位:Ctrl + 滑鼠左鍵
縮進:Tab / Tab+shift
換行:shift + enter
編譯:Ctrl+shift+F10
查看路徑:ctrl+l (或在終端輸入pwd)
3、pycharm使用碰到的一些問題
有時候我們在寫代碼時會發現代碼下面會出現一些波浪號(非編碼錯誤),治根的辦法就是在設置里將pycharm里的檢測選項去掉
在run代碼時出現無法編譯情況
一般我們想運行代碼,可以滑鼠右鍵run一下當前文件即可,可是有時出現下面這種情況
我們需要做的就是將py文件的名字換一下即可。
更多Python知識,請關註:Python自學網!!
3. BCH碼的編碼解碼
用Vn表示GF(2)域的n維線性空間,Vκ是Vn的κ維子空間,表示一個(n,κ)線性分組碼。Ei=(vi1,vi2…,vin)是代表Vκ的一組基底(i=1,2,…,κ)。以這組基底構成的矩陣
稱為該(n,κ)線性碼的生成矩陣。對於給定的消息組m=(m1,m2,…,mκ),按生成矩陣G,m被編為mG=m1E1+m2E2+…+mκEκ
這就是線性分組碼的編碼規則。若
之秩為n-κ並且滿足GH=0,僅當=(v1,v2,…,vn)∈n滿足H=0時,才為κ中的碼字。稱H為(n,κ)線性分組碼κ的均等校驗矩陣,稱H為矢量的伴隨式。假設v是發送的碼矢量,在接收端獲得一個失真的矢量r=v+E,式中E=(e1,e2,…,en)稱為錯誤型。由此rH=(v+e)H=eH
線性碼的解碼原則便以此為基礎。
4. python3.x默認使用的編碼是什麼
Python3.X 默認使用的編碼是 utf-8
5. python3.4 編碼有哪些
Python3中的編碼問題前,第一個段落對位元組、ASCII與Unicode與UTF-8等進行基本介紹,如果不對這幾種編碼犯頭暈,可直接跳過。
ASCII與Unicode與UTF-8與GBK
首先從老大哥說起。跟很多人一樣,大學讀了這么久,久仰ASCII編碼的大名。要說這個老大哥,我們再先從位元組說起。一個位元組包括八個比特位,每個比特位表示0或1,一個位元組即可表示從00000000到11111111共2^8=256個數字。一個ASCII編碼使用一個位元組(除去位元組的最高位作為作奇偶校驗位),ASCII編碼實際使用一個位元組中的7個比特位來表示字元,共可表示2^7=128個字元。比如那時寫C語言的程序,就經常要背下ASCII編碼中的01000001(即十進制的65)表示字元『A』,01000001加上32之後的01100001(即十進制的97)表示字元『a』。現在打開Python,調用chr和ord函數,我們可以看到Python為我們對ASCII編碼進行了轉換。
第一個00000000表示空字元,因此ASCII編碼實際上只包括了
字母、標點符號、特殊符號等共127個字元。因為ASCII是在美國出生的,對於由字母組成單詞進而用單詞表達的英文來說也是夠了。但是中國人、日本人、
韓國人等其他語言的人不服了。中文是一個字一個字,ASCII編碼用上了渾身解數256個字元都不夠用。
因此後來出現了Unicode編碼。Unicode編碼通常由兩個位元組組成,共表示256*256個字元,即所謂的UCS-2。某些偏僻字還會用到四個位元組,即所謂的UCS-4。也就是說Unicode標准也還在發展。但UCS-4出現的比較少,我們先記住:最原始的ASCII編碼使用一個位元組編碼,但由於語言差異字元眾多,人們用上了兩個位元組,出現了統一的、囊括多國語言的Unicode編碼。
在Unicode中,原本ASCII中的127個字元只需在前面補一個全零的位元組即可,比如前文談到的字元『a』:01100001,在Unicode中變成了00000000 01100001。不久,美國人不開心了,吃上了世界民族之林的大鍋飯,原本只需一個位元組就能傳輸的英文現在變成兩個位元組,非常浪費存儲空間和傳輸速度。
人們再發揮聰明才智,於是出現了UTF-8編碼。因為針對的是空間浪費問題,因此這種UTF-8編碼是可變長短的,從英文字母的一個位元組,到中文的通常的三個位元組,再到某些生僻字的六個位元組。解決了空間問題,UTF-8編碼還有一個神奇的附加功能,那就是兼容了老大哥的ASCII編碼。一些老古董軟體現在在UTF-8編碼中可以繼續工作。
注意除了英文字母相同,漢字在Unicode編碼和UTF-8編碼中通常是不同的。比如漢字的『中』字在Unicode中是01001110
00101101,而在UTF-8編碼中是11100100 10111000
10101101。
我們祖國母親自然也有自己的一套標准。那就是GB2312和GBK。當然現在挺少看到。通常都是直接使用UTF-8。記得我唯一一次看到GB編碼的網頁,是一個成人網站。
Python3中的默認編碼
Python3中默認是UTF-8,我們通過以下代碼:
import sys
sys.getdefaultencoding()
可查看Python3的默認編碼。
Python3中的encode和decode
Python3中字元編碼經常會使用到decode和encode函數。特別是在抓取網頁中,這兩個函數用的熟練非常有好處。我的理解,encode的作用,使我們看到的直觀的字元轉換成計算機內的位元組形式。decode剛好相反,把位元組形式的字元轉換成我們看的懂的、直觀的、「人模人樣」的形式。如下圖。
\x表示後面是十六進制,\xe4\xb8\xad即是二進制的11100100 10111000
10101101。也就是說漢字『中』encode成位元組形式,是11100100 10111000
10101101。同理,我們拿11100100
10111000 10101101也就是\xe4\xb8\xad來decode回來,就是漢字『中』。完整的應該是b'\xe4\xb8\xad',在Python3中,以位元組形式表示的字元串則必須加上前綴b,也就是寫成上文的b'xxxx'形式。
前文說的Python3的默認編碼是UTF-8,所以我們可以看到,Python處理這些字元的時候是以UTF-8來處理的。因此從上圖可以看到,就算我們通過encode('utf-8')特意把字元encode為UTF-8編碼,出來的結果還是相同:b'\xe4\xb8\xad'。
明白了這一點,同時我們知道UTF-8兼容ASCII,我們可以猜想大學時經常背誦的『A』對應ASCII中的65,在這里是不是也能正確的decode出來呢。十進制的65轉換成十六進制是41,我們嘗試下:
b'\x41'.decode()
結果如下。果然是字元『A』
Python3中的編碼轉換
據說字元在計算機的內存中統一是以Unicode編碼的。只有在字元要被寫進文件、存進硬碟或者從伺服器發送至客戶端(例如網頁前端的代碼)時會變成utf-8。但其實我比較關心怎麼把這些字元以Unicode的位元組形式表現出來,露出它在內存中的廬山正面目的。這里有個照妖鏡:
xxxx.encode/decode('unicode-escape')
輸出如下
b'\\u4e2d'還是b'\u4e2d,一個斜杠貌似沒影響。同時可以發現在shell窗口中,直接輸'\u4e2d'和輸入b'\u4e2d'.decode('unicode-escape')是相同的,都會列印出漢字『中』,反而是'\u4e2d'.decode('unicode-escape')會報錯。說明說明Python3不僅支持Unicode,而且一個『\uxxxx』格式的Unicode字元可被辨識且被等價於str類型。
如果我們知道一個Unicode位元組碼,怎麼變成UTF-8的位元組碼呢。懂了以上這些,現在我們就有思路了,先decode,再encode。代碼如下:
xxx.decode('unicode-escape').encode()
測試如下:
可以看到最後輸出的UTF-8位元組與上面的相同。嘗試成功。所以其他的編碼之間的轉換,大概也是如此。
最後的擴展
還記得剛剛那個ord嗎。時代變遷,老大哥ASCII被人合並,但ord還是有用武之地。試試ord('中'),輸出結果是20013。20013是什麼呢,我們再試試hex(ord('中')),輸出結果是'0x4e2d',也就是20013是我們在上文見面了無數次的x4e2d的十進制值。這里說下hex,是用來轉換成十六進制的函數,學過單片機的人對hex肯定不會陌生。
最後的擴展,在網上看到的他人的問題。我們寫下類似於'\u4e2d'的字元,Python3知道我們想表達什麼。但是讓Python讀取某個文件的時候出現了'\u4e2d',是不是計算機就不認識它了呢?後來下文有人給出了答案。如下:
import codecs
file = codecs.open( "a.txt", "r", "unicode-escape" )
u = file.read()
print(u)
6. 求編程高手幫忙~寫一段8位二進制折疊碼(PCM編碼器)編解碼程序
#include <stdio.h>
#include <conio.h>
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");
}
}