1. 程式人生 > >python之將byte轉換為int型別函式 int.from_bytes 詳解與原碼反碼補碼的簡單介紹

python之將byte轉換為int型別函式 int.from_bytes 詳解與原碼反碼補碼的簡單介紹

函式格式int.from_bytes(bytes, byteorder, *, signed=False)簡單demo:
s1 = b'\xf1\xff'
print(int.from_bytes(s1, byteorder='big', signed=False))
print(int.from_bytes(s1, byteorder='little', signed=True))

輸出:61951
          -15
引數解釋bytes是要轉換的十六進位制;byteorder:選'big'和'little',以上例為例,其中big代表正常順序,即f1ff。little反之,代表反序fff1;
signed:選True、Flase表示是否要區分二進位制的正負數含義。即是否要對原二進位制數進行原碼反碼補碼操作。在分析demo的轉換原理前我們首先要知道原碼、補碼、反碼的知識:原碼:為了表示負數.(改變開頭位數字表示正負,1為負,0為正)          我們都知道1的二進位制數為0001,那-1呢?為了表示負數,規定了如果開頭那個數字如果是1就代表負數,即-1的二進位制          數原碼為1001反碼:為了處理負數.(將負數的原碼除了開頭位全部由0變1或者由1變0)          我們都知道1+(-1)=0,但是二者的二進位制數 0001+1001=1010,結果是-2,這不是我們想要的,所以出現了反碼          反碼,顧名思義就是“反著來”,把0變成1,1變成0,反的是負數的原碼,即-1的反碼 1001 變成了1110。          這時候1+(-1)-> 0001 +1110=1111,再將結果1111從反碼返回成原碼即1000(-0),就是我們希望得到的數0.          注意:負數原碼最開頭表示數字正負的那個數字位 ”1“ 不需要進行反碼操作。補碼:為了處理-0與+0同時存在問題. (對反碼進行+1操作,如果最高位/開頭位被”溢位“,則捨去)          -0的原碼是1000,反碼是1111,如果+1,則它的補碼是10000,如果這是四位字長的二進位制存放位,就要把1捨去           ,即-0的補碼
成了0000,這是我們希望的不分正負的0的表示方式,解決了+0\-0同時存在問題。              相應的,當3+(-3)的時候,有0011 + 1101(1100的補碼) =10000,捨去最高為1,即結果為0000,是我們希望的 demo分析:f1轉換成二進位制是1111 0001  ,ff 則為1111 1111                   (1) 在第一行print中,我們引數選擇的是big正序,false不分正負符號,即:                             直接轉換正序 f1ff 二進位制:1111 0001 1111 1111 轉換為十進位制:61951                   (2)在第二行print中,我們引數選擇的是little反序,true代表區分正負符號,即:
                             首先轉換 f1ff 為反序 fff1 ,反序的二進位制有:1111 1111 1111 0001                             由於我們選擇了true,所以要區分二進位制的正負數含義:                             原碼1111 1111 1111 0001最高位(開頭位)是1,即此二進位制數為負數。                             再進行反碼操作,即有 1000 0000 0000 1110                             再進行補碼操作,有1000 0000 0000 1111                             由於最高位1(開頭位)不進行二進位制轉換計算,所以我們將除了最高位1(表示負數)以外                                 數字進行二進位制轉換十進位制操作,即000 0000 0000 1111的十進位制為15,即最後結果為-15.                        

相關推薦

pythonbyte轉換int型別函式 int.from_bytes 補碼簡單介紹

函式格式:int.from_bytes(bytes, byteorder, *, signed=False)簡單demo:s1 = b'\xf1\xff' print(int.from_bytes(s1, byteorder='big', signed=False)) pri

【sql】 float 轉換資料型別 numeric 時出現算術溢位錯誤

sql中float型別的取值範圍? 大於9999999999的情況下,就會報錯將 float 轉換為資料型別 numeric 時出現算術溢位錯誤   insert into[dbo].[T_DATA_DISEASE](STATIONCODE,MONIDATE,RATE,STYL

python如何圖片轉換字元圖片

簡介 一個簡單的python程式,將圖片轉換為字元圖片。 (為了簡便,很多引數寫死了,自己看著改吧。 (←∀←)) 正文 原圖(侵刪) 結果圖 原始碼 [更多細節]——> #-*- coding: UTF-8 -*- from PIL i

numeric轉換資料型別numeric是出現算術溢位錯誤

將numeric轉換為資料型別numeric是出現算術溢位錯誤          相信很多朋友都遇到過這樣的問題,今天我也痛苦了好長時間.從網上得到的答案無非就是把這個標題解釋一下,以便傻到我這種程度的人都能看

Python批量ppt轉換pdf

這是一個Python指令碼,能夠批量地將微軟Powerpoint檔案(.ppt或者.pptx)轉換為pdf格式 使用說明 1、將這個指令碼跟PPT檔案放置在同一個資料夾下 2、執行這個指令碼 程式碼如下: import comtypes.client im

笨辦法學Python物件名的字串型別,轉化成相應物件

1,方法一: class obj(object):        pass   a = eval('obj()')  物件名的字串型別要加括號,用eval關鍵字來建立物件。 2,方法二: #將用來建立物件的

如何從使用者輸入字串轉換整數型別並鍵入Double?

/** * MadLib.java * * @author: Jackie Hirsch * Assignment: Madlib * * Brief Program Description: This program has will read a mad

C#資料轉換指定型別,支援對可空型別(Nullable類)轉換方法示例

我們知道在C#中,引用型別可以為null,而值型別不可以為null,就是值型別必須要有值。msdn上面的解釋是值型別沒有足夠的空量來表示空值,它的容量只夠表示適合該型別的值,沒有多餘的容量。而資料庫中(比如sqlserver)中,任何型別的值都是可以為null的,這就給我們

stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個可以字串轉換數字的函式

標頭檔案:#include <stdlib.h> atoi() 函式用來將字串轉換成整數(int),其原型為: int atoi (const char * str); 【函式說明】atoi() 函式會掃描引數 str 字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過 

[Python]pythonxlwt模組列寬width、行高Heights

轉自:http://www.3fwork.com/b204/001224MYM011551/ python之xlwt模組列寬width、行高Heights詳解 今天用python操作excel時,發現xlwt的API中沒有對width、height有更多介紹,且使用時也不

python】numpy庫陣列拼接np.concatenate官方文件例項

在實踐過程中,會經常遇到陣列拼接的問題,基於numpy庫concatenate是一個非常好用的陣列操作函式。 1、concatenate((a1, a2, …), axis=0)官方文件詳解 concatenate(...) concatenate(

【COCOS2DX-LUA 指令碼開發六】利用Lua強轉函式解決使用CCNode報錯或無法正常使用以及簡單介紹 quick-cocos2d-x OpenQuick 兩款Lua免費開源框架

Him 的Cocos2dx-Lua群中有童鞋出現一個問題,問題是當他在Lua專案中利用Lua建立一個區域性變數CCSprite或者CCLayer等CCNode,然後在其他的函式中通過其索引取出之前建立過的CCSprite或CCLayer等,取出後進行設定設定透明、座標、縮放、

Python IP轉換int

soc main spa == style print int 127.0.0.1 toa import socket import struct if __name__ == ‘__main__‘: ip = ‘127.0.0.1‘ int

python基礎,str型別轉換float型別

from functools import reduce def str2float(s):      L=s.split('.');     return reduce(lambda x,y:y+x

Golang:根據asciiint型 []byte 轉換 string

//Golang: 根據ascii碼錶將 []byte 轉換為 string //以下函式入參為int型切片陣列,函式返回根據ASCII錶轉換後的字串。 import ( "unsafe"

影象BYTE(unsigned char)陣列轉換VARIANT型別

  因為近期工作需要完成OCX控制元件同時支援C#與C++呼叫,所以介面設定就會遇上些問題。在需要將圖片的記憶體資料(buffer)傳入控制元件時,如果按照C++慣例,設計介面引數型別為unsigned

[Python Study Notes]批量ppt轉換pdf

abs b- ber () link mat pad python not 腳本使用:1.python 3.x(2.x未測試)2.需要機器上裝有PowerPoint3.pip install comtypes4.將需要轉的ppt,pptx格式文件放到當前目錄下5.運行該腳本

[Python Study Notes]批量ppt轉換pdf v1,0

找到 -s inpu tput 列表 usr als get 環境 ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ >

[Python Study Notes]批量wold轉換pdf

creat turn != file get dir files lose documents 本文代碼,由原ppt2pdf.py進行改寫‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘

python 圖片轉換base64編碼轉儲進數據庫

join 圖片轉換 exce 中間 sof com sys hal ims # _*_ coding: utf-8 _*_#中間件:拓展工具遍歷文件夾,對文件夾圖片進行base64編碼,寫入數據庫,並且讀取查找方法__author__ = ‘wf15038‘__date__