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)
再牛逼的梦想也架不住傻逼似的坚持

浙公网安备 33010602011771号