DataFrame中CAN消息十六进制字符串列表转真实十六进制值的方法
十六进制字符串转数值型十六进制值实现方法
首先明确:Python 中0x开头的字面量本质是整数类型,0x0和整数0是完全等价的,只是书写格式不同,不存在独立的“十六进制类型”。你需要的转换逻辑就是把字符串格式的十六进制表示转成对应整数即可。
场景1:已有字符串列表直接转换
用列表推导式结合int()的进制参数实现,代码如下:
str_hex_list = ['0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x1'] int_hex_list = [int(item, 16) for item in str_hex_list]
转换后得到的int_hex_list就是你需要的数值列表,直接进行CAN报文的位运算、拼接等操作都可正常执行。
场景2:直接从Pandas DataFrame转换
如果数据还在DataFrame中,可直接做批量转换,效率更高,无需先生成字符串列表:
import pandas as pd # 假设df为存储CAN报文的原始DataFrame,每一行对应1条CAN消息的8个字节 df_converted = df.apply(lambda col: col.map(lambda val: int(val, 16))) # 取某一行转为列表 row_hex_list = df_converted.iloc[0].tolist()
补充说明
- 如果原始字符串没有
0x前缀,int(val, 16)也可以正常识别转换,无需额外加前缀 - 如果你需要在打印时显示
0x前缀的格式,可在输出时调用hex()方法:
print([hex(x) for x in int_hex_list]) # 输出:['0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x1']
注意该输出得到的是字符串格式,仅用于展示,不建议用于后续数值运算。
内容的提问来源于stack exchange,提问作者siddheshk
相关产品推荐
相关产品推荐

