python3二進制
『壹』 如何用python生成和讀取二進制文件
withopen('a.jpg','rb')asf:
s=f.read()
withopen('b.exe','wb')asf:
f.write(s)
『貳』 python 怎麼處理二進制文件
處理二進制數據離不開python的struct模塊,struct理解上你可以把它理解為c語言的結構體,使用該模塊的pack和unpack方法,可以很容易的把二進制數據轉換為常用的類型數據,如整型、字元型等
結構體如下:
struct Header
{
unsigned short id;
char[4] tag;
unsigned int version;
unsigned int count;
}
『叄』 python中%如何將一個三位數轉化為二進制的形式
實用的 Python —— 進制(二進制形式中 1 的位數) - Zhang's ...
進制的數轉化為二進制形式,不過該二進制形式以 0b 開頭,為字元串類型. #convertadecimal(... 本文使用python中自帶函數將一個整數在二進制、八進制、十進制
『肆』 python怎麼處理二進制流
可以的,二進制是計算機內的表示方法,處理二進制數據是最基本的能力。
如果是二進制字元串轉十進制:
>>> x = '10101010'
>>> int(x, 2)
170
如果是從文件或網路中獲取的數據,要知道某一位是0還是1的話,獲取的數據可以按字元讀取,由於一個字元由8位二進製表示,分別讀取1到8位的二進制值就可以了:
>>> get_char_bit = lambda char, n: (char >> (8-n)) & 1 # 從高到低分別為第1~8位
>>> data = b'ab' # 在python3中字元串默認是unicode,所以加上b前綴兼容
>>> # 在python3中按字元讀取byte字元串是數字,而python2讀出來的卻是字元,但bytearray是一致的都是數字
>>> data = bytearray(data)
>>> result = []
>>> for char in data:
for i in range(1, 9):
result.append(get_char_bit(char, i))
>>> result
[0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]
『伍』 python中的進制轉換和原碼,反碼,補碼
python中的進制轉換和原碼,反碼,補碼
計算機文件大小單位
b = bit 位(比特)
B = Byte 位元組
1Byte = 8 bit #一個位元組等於8位 可以簡寫成 1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
進制分類
二進制:由2個數字組成,有0 和 1 python中標志:0b
八進制:由8個數字組成,有0,1,2,3,4,5,6,7 python中標志:0o
十進制:有10個數字組成,有0,1,2,3,4,5,6,7,8,9 python中標志:無
十六進制:有16個數字組成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(進制字母大小寫都可以,分別代表10,11,12,13,14,15) python中標志:0x
python中的進制轉換:
其他進制轉換為十進制:int(相應進制)
其他進制轉換為二進制:bin(相應進制)
其他進制轉換為八進制:oct(相應進制)
其他進制轉換為十六進制:hex(相應進制)
二進制 轉化成 十進制:
例: 0b10100101
運算:1* 2^0 + 0* 2^1 + 1* 2^2 + 0* 2^3 + 0* 2^4 + 1* 2^5 + 0* 2^6 + 1* 2^7=
1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165
八進制 轉化成 十進制:
例: 0o127
運算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87
十六進制 轉化成 十進制:
例: 0xff
運算:15*16^0 + 15*16^1 = 255
十進制 轉化成 二進制:
426 => 0b110101010
運算過程: 用426除以2,得出的結果再去不停地除以2,
直到除完最後的結果小於2停止,
在把每個階段求得的余數從下到上依次拼接完畢即可
十進制 轉化成 八進制:
426 => 0o652
運算過程: 用426除以8,得出的結果再去不停地除以8,
直到除完最後的結果小於8停止,
在把每個階段求得的余數從下到上依次拼接完畢即可
十進制 轉化成 十六進制:
運算過程: 用426除以16,得出的結果再去不停地除以16,
直到除完最後的結果小於16停止,
在把每個階段求得的余數從下到上依次拼接完畢即可。
相關推薦:《Python視頻教程》
原碼,反碼,補碼
實際人們看到的數字是原碼轉化之後顯示出來的。
而原碼是通過補碼得到的。
計算機的所有數據在底層都是以二進制的補碼形式存儲。
***進制轉換的時候需要先把內存存儲的補碼拿出來變成原碼在進行轉換輸出***
反碼:二進制碼0變1,1變0叫做反碼,反碼用於原碼補碼之間的轉換。
補碼:用來做數據的存儲運算,可以實現計算機底層的減法操作,因而提出(可以表達出一個數的正負)。
也就是說默認計算機只會做加法,例:5+(-3) => 5 - 3。
乘法除法是通過左移和右移 << >> 來實現。
正數高位補0,負數高位補1。
正數:
原碼 = 反碼 = 補碼
負數:
反碼 = 原碼取反(除高位)
補碼 = 反碼加1
反碼 = 補碼減1
原碼 = 反碼取反(除高位)
我們會發現,在取反前減1和在取反後加1的效果是一樣的,這就和-2-1 = -(2+1)一個道理,所以會得出這樣的規律:
原碼 = 補碼取反加1
補碼 = 原碼取反加1
一個數在計算機中的二進製表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 叫符號位正數為0, 負數為1。
比如
正數1在計算機中的存儲即為
0 00000000000000000000001
負數1 在計算機中的存儲即為
1 00000000000000000000001
一個正數,轉換為二進制位就是這個正數的原碼。負數的絕對值轉換成二進制位然後在高位補1就是這個負數的原碼。
正數的反碼就是原碼,負數的反碼等於原碼除符號位以外所有的位取反。
正數的補碼與原碼相同,負數的補碼為 其原碼除符號位外所有位取反(得到反碼了),然後最低位加1。
所以原碼,反碼,補碼正數情況下是一致的,負數情況下是不一致的。
計算機的運算過程實際就是補碼相加的一個過程。
比如-2 + 3
-2 的原碼為
1 000000000000000000000000010
反碼為:
1 111111111111111111111111101
補碼為:
1 111111111111111111111111110
3的原碼為
0 000000000000000000000000011
反碼為:
0 000000000000000000000000011
補碼為:
0 000000000000000000000000011
那麼二者補碼相加結果為
1 111111111111111111111111110
+
0 000000000000000000000000011
=
10 000000000000000000000000001(計算機存儲為32位,故前面溢出的1被舍棄,高位為0)
0 000000000000000000000000001
結果為1
再比如-2 + 1
-2 的原碼為
1 000000000000000000000000010
反碼為:
1 111111111111111111111111101
補碼為:
1 111111111111111111111111110
1的原碼為
0 000000000000000000000000001
1的反碼為:
0 000000000000000000000000001
1的補碼為:
0 000000000000000000000000001
二者的補碼相加結果為
1 111111111111111111111111110
+
0 000000000000000000000000001
=
1 111111111111111111111111111
得出的補碼轉化為原碼, 最低位減一得到反碼,然後除符號位外所有位取反,得到結果
1 000000000000000000000000001
結果為1
『陸』 python 3.x 寫二進制文件
FileOutput=open(r'test.txt','wb')
FileOutput.write(b'xc4')
FileOutput.write(b'xe3')
FileOutput.close()
『柒』 python關於二進制文件讀取的問題
argument for 's' must be a bytes object
參數必須是bytes object
『捌』 python3字元串與二進制怎麼實現互相轉換
b、d、o、x 分別表示 二進制、十進制、八進制和十六進制
num = 25
print('{:b}'.format(num))
print('{:d}'.format(num))
print('{:o}'.format(num))
print('{:x}'.format(num))
『玖』 python整數轉化為二進制
1、你可以自己寫函數採用 %2 的方式來算。
>>> binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)>>> binary(5)'101'>>>
2、採用 python 自帶了方法 bin 函數,比如 bin(12345) 回返回字元串 '0b11000000111001', 這個時候在把0b去掉即可:
>>> bin(12345).replace('0b','')'11000000111001'
3、也可以採用字元串的 format 方法來獲取二進制:
>>> "{0:b}".format(12345)'11000000111001'>>>
『拾』 python3 二進制轉為16進制字元串
>>> '{:0>2}'.format('{:x}'.format(10))
'0a'
>>> '%02x' % 10
'0a'