python 讀取24 位有符號整型資料

2021-08-23 14:34:21 字數 703 閱讀 3245

兩種辦法

一、補充成4位元組,安int方法解析

import struct

fp=open(filename,'rb') #開啟檔案

chunk=fp.read(3*n) #讀取n個資料,占用3*n個位元組

bytess=chunk[i*3:i*3+3] #讀取第i個資料

bytess2=bytess+b'\x00' #在末尾補充乙個空位元組

value=struct.unpack('>i',bytess2)[0]/256 #按照int的方式讀取資料,256是因為資料左移了8位,要變回來。

注意,本次的資料是big endian(大端)資料,因此,是在末尾補充空位元組。如果是little endian

則應在開頭補充。

二、呼叫rawulib 庫解析

rawilib中有int24,用u表示.

import rawutil

fp=open(filename,'rb') #開啟檔案

chunk=fp.read(3*n) #讀取n個資料,占用3*n個位元組

bytess=chunk[i*3:i*3+3] #讀取第i個資料

value=rawutil.unpack('>1u',bytess)[0] #按照int24的方式解析資料。

推薦用第二種,效率高。符號『>』,表示大端資料。 

有符號數的符號位擴充套件

char和int型別都是由符號數型別,char型別的變數佔據1個位元組的容量,int型別的變數佔據4個位元組的容量。那麼,把char型別變數賦給int型別變數,會有什麼問題產生?我們會很直觀地認為,把1個位元組大小的資料,放入4個位元組大小的容量,沒有任何問題啊!我們做如下的乙個測試例子 inclu...

24位二進位制解析為有符號整數

include int getdata char buf,int n buf 0 是高位位元組,buf 2 是低位位元組 int main char b 3 result getdata a,3 printf d n result result getdata b,3 printf d n resu...

有符號位和無符號位。 int8疑問有感

學習go語言的資料型別,看見int int8 int16很是疑惑,int8是什麼意思?查詢資料進行綜合解釋大概如下 int8是有符號位8位整形 128到127 隨即產生疑惑,為什麼負數可表示到 128,正數只能127,少一位是為什麼?解答 有符號位的表達形式是最高位是符號位,其餘是數值,正數的表達方...