在 C 語言中,有很多種基本的資料型別,如bool
char
, int
, long
, float
, double
等。在 Python 中,可以使用 struct
模組來解碼這些型別的二進位制表示。
以下是 C 語言中的常見型別以及對應的 Python 解碼方法:
C 語言型別及其 Python 解碼格式
-
char
(字元)- C 型別:
char
- Python 格式:
'c'
(單個字元) - 位元組大小:1 位元組
- 示例解碼:
import struct data_char = b'\x41' # 這代表字元 'A' # 解碼 char 型別 char_value = struct.unpack('<c', data_char)[0] print(char_value) # 輸出: b'A'
- C 型別:
-
signed char
(帶符號字元)- C 型別:
signed char
- Python 格式:
'b'
(帶符號的單個位元組) - 位元組大小:1 位元組
- 示例解碼:
data_schar = b'\x01' # 這代表 signed char 型別的 1 # 解碼 signed char 型別 schar_value = struct.unpack('<b', data_schar)[0] print(schar_value) # 輸出: 1
- C 型別:
-
unsigned char
(無符號字元)- C 型別:
unsigned char
- Python 格式:
'B'
(無符號的單個位元組) - 位元組大小:1 位元組
- 示例解碼:
data_uchar = b'\x01' # 這代表 unsigned char 型別的 1 # 解碼 unsigned char 型別 uchar_value = struct.unpack('<B', data_uchar)[0] print(uchar_value) # 輸出: 1
- C 型別:
-
short
(短整型)- C 型別:
short
- Python 格式:
'h'
(帶符號的短整型) - 位元組大小:2 位元組
- 示例解碼:
data_short = b'\x00\x01' # 這代表 short 型別的 1 # 解碼 short 型別 short_value = struct.unpack('<h', data_short)[0] print(short_value) # 輸出: 1
- C 型別:
-
unsigned short
(無符號短整型)- C 型別:
unsigned short
- Python 格式:
'H'
(無符號的短整型) - 位元組大小:2 位元組
- 示例解碼:
data_ushort = b'\x00\x01' # 這代表 unsigned short 型別的 1 # 解碼 unsigned short 型別 ushort_value = struct.unpack('<H', data_ushort)[0] print(ushort_value) # 輸出: 1
- C 型別:
-
int
(整型)- C 型別:
int
- Python 格式:
'i'
(帶符號的整型) - 位元組大小:4 位元組
- 示例解碼:
data_int = b'\x00\x00\x00\x01' # 這代表 int 型別的 1 # 解碼 int 型別 int_value = struct.unpack('<i', data_int)[0] print(int_value) # 輸出: 1
- C 型別:
-
unsigned int
(無符號整型)- C 型別:
unsigned int
- Python 格式:
'I'
(無符號的整型) - 位元組大小:4 位元組
- 示例解碼:
data_uint = b'\x00\x00\x00\x01' # 這代表 unsigned int 型別的 1 # 解碼 unsigned int 型別 uint_value = struct.unpack('<I', data_uint)[0] print(uint_value) # 輸出: 1
- C 型別:
-
long
(長整型)- C 型別:
long
- Python 格式:
'l'
(帶符號的長整型) - 位元組大小:4 位元組
- 示例解碼:
data_long = b'\x00\x00\x00\x01' # 這代表 long 型別的 1 # 解碼 long 型別 long_value = struct.unpack('<l', data_long)[0] print(long_value) # 輸出: 1
- C 型別:
-
unsigned long
(無符號長整型)- C 型別:
unsigned long
- Python 格式:
'L'
(無符號的長整型) - 位元組大小:4 位元組
- 示例解碼:
data_ulong = b'\x00\x00\x00\x01' # 這代表 unsigned long 型別的 1 # 解碼 unsigned long 型別 ulong_value = struct.unpack('<L', data_ulong)[0] print(ulong_value) # 輸出: 1
- C 型別:
-
long long
(長長整型)- C 型別:
long long
- Python 格式:
'q'
(帶符號的長長整型) - 位元組大小:8 位元組
- 示例解碼:
data_llong = b'\x00\x00\x00\x00\x00\x00\x00\x01' # 這代表 long long 型別的 1 # 解碼 long long 型別 llong_value = struct.unpack('<q', data_llong)[0] print(llong_value) # 輸出: 1
- C 型別:
-
unsigned long long
(無符號長長整型)- C 型別:
unsigned long long
- Python 格式:
'Q'
(無符號的長長整型) - 位元組大小:8 位元組
- 示例解碼:
data_ullong = b'\x00\x00\x00\x00\x00\x00\x00\x01' # 這代表 unsigned long long 型別的 1 # 解碼 unsigned long long 型別 ullong_value = struct.unpack('<Q', data_ullong)[0] print(ullong_value) # 輸出: 1
- C 型別:
-
float
(單精度浮點型)- C 型別:
float
- Python 格式:
'f'
(單精度浮點型) - 位元組大小:4 位元組
- 示例解碼:
data_float = b'\x00\x00\x80\x3f' # 這代表 float 型別的 1.0 # 解碼 float 型別 float_value = struct.unpack('<f', data_float)[0] print(float_value) # 輸出: 1.0
- C 型別:
-
double
(雙精度浮點型)- C 型別:
double
- Python 格式:
'd'
(雙精度浮點型) - 位元組大小:8 位元組
- 示例解碼:
data_double = b'\x00\x00\x00\x00\x00\x00\xf0?' # 這代表 double 型別的 1.0 # 解碼 double 型別 double_value = struct.unpack('<d', data_double)[0] print(double_value) # 輸出: 1.0
- C 型別:
-
bool
(布林型別)- C 型別:
bool
或unsigned char
用於布林值(通常表示為 0 或 1) - Python 格式:
'B'
(無符號的單個位元組,通常用於布林值) - 位元組大小:1 位元組
- 示例解碼:
data_bool = b'\x01' # 這代表 bool 型別的 True (1) # 解碼 bool 型別 bool_value = struct.unpack('<B', data_bool)[0] != 0 print(bool_value) # 輸出: True
- C 型別:
注意事項:
- 位元組序可以在格式字串中指定,例如
<
表示小端位元組序,>
表示大端位元組序。 - 上述示例假設資料是按照小端位元組序排列的,因此使用
<
作為位元組序標誌。 - 根據平臺的不同,某些型別的位元組大小可能會有所不同(例如
int
和long
)。 - 當解碼布林型別時,通常使用
!= 0
來將其轉換為 Python 的布林值。
- 根據平臺的不同,某些型別的位元組大小可能會有所不同(例如
int
和long
)