十六進制的字符串倒是有現成的函數,bytearray.fromhex就可以轉換,二進制的就只有你自己解析了。
創新互聯建站是一家集網站建設,通州企業網站建設,通州品牌網站建設,網站定制,通州網站建設報價,網絡營銷,網絡優化,通州網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
將字符串每4個字符,進行處理,轉換成0~F的16進制字符,然后再用bytearray、bytes的fromhex轉換
說實話我沒搞懂為啥要弄成二進制字符串,這不是浪費空間么,用文本表示,都是用的HEX字符串或者BASE64
上一次我們說到了Hex與Bytes的轉換,很快我們又遇到了bit位的判斷。
場景如下:我們需要判斷DTC_Status的8個bit中任意一個或幾個bit的狀態。假設DTC_Status=0x2F,我們需要判斷bit0和bit3是否為1.
解決這個問題的方法有很多。程序員往往喜歡用bit移位后與上0或1來進行判斷。
但我總覺得這種方法不夠直觀,所以我通常會將每一個Bit都展開后,再去判斷。
下面寫一下大致的思路。
轉換后,DTC_Status已經是一個字符串了,其中包含了8個bits的0,1狀態。
有了這個函數后,我們就可以用bits_compare(DTC_Status , 'xxxx1xx1')的方式來判斷DTC_Status了。x代表不需要判斷的位。
這里也順便提下,有時,我們也需要將一個二進制的值,如:'00001001' 轉為十進制或十六進制。
此時,我們可以用int,加參數2來實現。通過字符串的切片操作,我們也可以更改某個bit的值。
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中bit函數 python bits
文章鏈接:http://m.newbst.com/article38/dogphsp.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、響應式網站、全網營銷推廣、微信小程序、移動網站建設、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯