python解析c类型数据
在 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
)
再牛逼的梦想也架不住傻逼似的坚持