DBC文件格式解析

DBC文件是汽车电子控制系统中用于描述CAN总线数据帧结构的标准格式。本文详细介绍了DBC文件的组成部分,包括网络节点(BU_)、报文帧(BO_)、信号(SG_)及其注释(CM_),并解析了属性值(BA_)和数值表(VAL_)。DBC文件的关键字如GenMsgSendType、GenMsgCycleTime等用于定义报文和信号的发送方式和周期。此外,还探讨了属性定义(BA_DEF_)和初始值(BA_DEF_DEF_)的用途,以及如何通过VAL_定义信号的数值表。这些内容对于理解和解析DBC文件以进行汽车网络通信至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DBC文件格式解析

1. DBC文件结构

VERSION ""


NS_ : 
	NS_DESC_
	CM_
	BA_DEF_
	BA_
	VAL_
	CAT_DEF_
	CAT_
	FILTER
	BA_DEF_DEF_
	EV_DATA_
	ENVVAR_DATA_
	SGTYPE_
	SGTYPE_VAL_
	BA_DEF_SGTYPE_
	BA_SGTYPE_
	SIG_TYPE_REF_
	VAL_TABLE_
	SIG_GROUP_
	SIG_VALTYPE_
	SIGTYPE_VALTYPE_
	BO_TX_BU_
	BA_DEF_REL_
	BA_REL_
	BA_DEF_DEF_REL_
	BU_SG_REL_
	BU_EV_REL_
	BU_BO_REL_
	SG_MUL_VAL_

BS_:

BU_: IC BCM
VAL_TABLE_ EDR_CrashOutputSts 3 "Front and side(Reserved)" 2 "Side(Reserved)" 1 "Front" 0 "No crash" ;
VAL_TABLE_ FCW_Collision 7 "level 7" 6 "level 6" 5 "level 5" 4 "level 4" 3 "level 3" 2 "level 2" 1 "level 1" 0 "no warning" ;
VAL_TABLE_ LDW_Status 3 "Reserved" 2 "LDW Active(Speed >= 60km/h)" 1 "LDW Idle (Speed < 60km/h)" 0 "LDW Close" ;
VAL_TABLE_ IC_Fuel_Signal_Open 3 "Not available" 2 "Short Circuit" 1 "Open" 0 "No Fault" ;
VAL_TABLE_ BCM_DTC 3 "Not available" 2 "Error" 1 "Fault" 0 "No Fault" ;
VAL_TABLE_ TPMS_Battery_status 1 "low voltage" 0 "normal" ;
VAL_TABLE_ TPMS_Temperature 1 "high temperature" 0 "normal" ;
VAL_TABLE_ TPMS_high_Pressure 1 "high pressure" 0 "normal" ;
VAL_TABLE_ TPMS_low_Pressure 1 "low pressure" 0 "normal" ;
VAL_TABLE_ TPMS_Leak_status 1 "fast air leakage" 0 "normal" ;
VAL_TABLE_ TPMS_Battery_voltage_single 3 "reserved" 2 "reserved" 1 "ow voltage" 0 "normal" ;
VAL_TABLE_ TPMS_temperature_a_single 3 "reserved" 2 "high temperature" 1 "superhigh temperature" 0 "normal" ;
VAL_TABLE_ TPMS_Pressure_single 3 "reserved" 2 "low pressure" 1 "high pressure" 0 "normal" ;
VAL_TABLE_ TPMS_Leak_status_single 3 "reserved" 2 "slow air leakage(reserved)" 1 "fast air leakage" 0 "normal" ;
VAL_TABLE_ System_LED_status 3 "reserved" 2 "System error" 1 "System self-check" 0 "System normal" ;
VAL_TABLE_ TPMS_Signa_abnormal 1 "Signal abnormal" 0 "Signal normal" ;
VAL_TABLE_ TPMS_Tire_position 5 "RR" 4 "LR" 3 "RRO" 2 "LRO" 1 "RF" 0 "LF" ;
VAL_TABLE_ BCM_RKE 1 "unlock" 0 "lock" ;
VAL_TABLE_ BCM_Win 2 "falling" 1 "raising" 0 "inactive" ;
VAL_TABLE_ BCM_AntiThief 7 "Description for the value '0x7'" 6 "Description for the value '0x6'" 5 "partially_armed" 4 "alarm" 3 "remind" 2 "armed" 1 "pre-armed'" 0 "disarmed" ;
VAL_TABLE_ BCM_SW_2_Value 1 "active" 0 "inactive" ;
VAL_TABLE_ BCM_KeyStatus 4 "START" 3 "OFF" 2 "ACC" 1 "Reserved" 0 "ON" ;
VAL_TABLE_ BCM_SW_4_Value_ 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;


BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX
 SG_ BCM_SysSt_RKE : 0|2@1+ (1,0) [0|3] "" Vector__XXX

BO_ 2566840343 IC_SysSt1: 8 IC
 SG_ IC_SysSt1_distance : 32|32@1+ (0.125,0) [0|0] "" Vector__XXX

BO_ 2566847511 IC_SysSt: 8 IC
 SG_ IC_SysSt_Fuel_level : 8|8@1+ (0.4,0) [0|100] "" Vector__XXX

BO_ 2365484055 IC_TCO1: 8 IC
 SG_ IC_TCO1_Speed : 48|16@1+ (0.00390625,0) [0|255.99609375] "km/h" Vector__XXX

BO_ 2432639009 BCM_STA: 8 BCM
 SG_ BCM_STA_TGDoor : 32|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_Seat_Belt : 2|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_RRDoor : 30|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_Right_Turn : 12|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_RFDoor : 26|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_Parking_Brake : 0|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_LRDoor : 28|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_LFDoor : 24|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_Left_Turn : 14|2@1+ (1,0) [0|3] "" Vector__XXX
 SG_ BCM_STA_IGN : 34|4@1+ (1,0) [0|15] "" Vector__XXX



CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider.";
BA_DEF_ SG_  "GenSigTimeoutTime" INT 0 65535;
BA_DEF_ SG_  "GenSigTimeoutValue" INT 0 65535;
BA_DEF_ SG_  "GenSigSendType" ENUM  "Cyclic","OnWrite","OnWriteWithRepetition","OnChange","OnChangeWithRepetition","IfActive","IfActiveWithRepetition","NoSigSendType","NotUsed","NotUsed","NotUsed","NotUsed","NotUsed";
BA_DEF_ SG_  "GenSigCycleTime" INT 0 0;
BA_DEF_ SG_  "GenSigCycleTimeActive" INT 0 0;
BA_DEF_ SG_  "GenSigInactiveValue" INT 0 0;
BA_DEF_ SG_  "GenSigStartValue" INT 0 0;
BA_DEF_ BO_  "DiagRequest" ENUM  "no","yes";
BA_DEF_ BO_  "DiagResponse" ENUM  "no","yes";
BA_DEF_ BO_  "DiagState" ENUM  "no","yes";
BA_DEF_ BO_  "DiagUudResponse" ENUM  "False","True";
BA_DEF_ BO_  "DiagUudtResponse" ENUM  "false","true";
BA_DEF_ BO_  "GenMsgFastOnStart" INT 0 65535;
BA_DEF_ BO_  "GenMsgILSupport" ENUM  "no","yes";
BA_DEF_ BO_  "NmAsrMessage" ENUM  "no","yes";
BA_DEF_ BO_  "NmMessage" ENUM  "no","yes";
BA_DEF_ BO_  "TpTxIndex" INT 0 255;
BA_DEF_ BO_  "GenMsgSendType" ENUM  "Cyclic","NotUsed","NotUsed","NotUsed","NotUsed","NotUsed","NotUsed","IfActive","NoMsgSendType","NotUsed";
BA_DEF_ BO_  "GenMsgCycleTime" INT 0 0;
BA_DEF_ BO_  "GenMsgCycleTimeFast" INT 0 0;
BA_DEF_ BO_  "GenMsgNrOfRepetition" INT 0 0;
BA_DEF_ BO_  "GenMsgDelayTime" INT 0 0;
BA_DEF_ BO_  "GenMsgStartDelayTime" INT 0 0;
BA_DEF_ BU_  "ILUsed" ENUM  "no","yes";
BA_DEF_ BU_  "NmAsrCanMsgCycleOffset" INT 0 65535;
BA_DEF_ BU_  "NmAsrCanMsgReducedTime" INT 1 65535;
BA_DEF_ BU_  "NmAsrNode" ENUM  "no","yes";
BA_DEF_ BU_  "NmAsrNodeIdentifier" HEX 0 255;
BA_DEF_ BU_  "NmNode" ENUM  "no","yes";
BA_DEF_ BU_  "NmStationAddress" HEX 0 255;
BA_DEF_  "DBName" STRING ;
BA_DEF_  "ILTxTimeout" INT 0 65535;
BA_DEF_  "NmAsrBaseAddress" HEX 0 2047;
BA_DEF_  "NmAsrCanMsgCycleTime" INT 1 65535;
BA_DEF_  "NmAsrMessageCount" INT 1 256;
BA_DEF_  "NmAsrRepeatMessageTime" INT 0 65535;
BA_DEF_  "NmAsrTimeoutTime" INT 1 65535;
BA_DEF_  "NmAsrWaitBusSleepTime" INT 0 65535;
BA_DEF_  "Manufacturer" STRING ;
BA_DEF_  "NmType" STRING ;
BA_DEF_  "Baudrate" INT 0 1000000;
BA_DEF_  "BusType" STRING ;
BA_DEF_ BU_  "NodeLayerModules" STRING ;
BA_DEF_ BU_  "ECU" STRING ;
BA_DEF_ BU_  "CANoeJitterMax" INT 0 0;
BA_DEF_ BU_  "CANoeJitterMin" INT 0 0;
BA_DEF_ BU_  "CANoeDrift" INT 0 0;
BA_DEF_ BU_  "CANoeStartDelay" INT 0 0;
BA_DEF_DEF_  "GenSigTimeoutTime" 0;
BA_DEF_DEF_  "GenSigTimeoutValue" 0;
BA_DEF_DEF_  "GenSigSendType" "Cyclic";
BA_DEF_DEF_  "GenSigCycleTime" 0;
BA_DEF_DEF_  "GenSigCycleTimeActive" 0;
BA_DEF_DEF_  "GenSigInactiveValue" 0;
BA_DEF_DEF_  "GenSigStartValue" 0;
BA_DEF_DEF_  "DiagRequest" "no";
BA_DEF_DEF_  "DiagResponse" "no";
BA_DEF_DEF_  "DiagState" "no";
BA_DEF_DEF_  "DiagUudResponse" "False";
BA_DEF_DEF_  "DiagUudtResponse" "false";
BA_DEF_DEF_  "GenMsgFastOnStart" 0;
BA_DEF_DEF_  "GenMsgILSupport" "no";
BA_DEF_DEF_  "NmAsrMessage" "no";
BA_DEF_DEF_  "NmMessage" "no";
BA_DEF_DEF_  "TpTxIndex" 0;
BA_DEF_DEF_  "GenMsgSendType" "Cyclic";
BA_DEF_DEF_  "GenMsgCycleTime" 0;
BA_DEF_DEF_  "GenMsgCycleTimeFast" 0;
BA_DEF_DEF_  "GenMsgNrOfRepetition" 0;
BA_DEF_DEF_  "GenMsgDelayTime" 0;
BA_DEF_DEF_  "GenMsgStartDelayTime" 0;
BA_DEF_DEF_  "ILUsed" "no";
BA_DEF_DEF_  "NmAsrCanMsgCycleOffset" 0;
BA_DEF_DEF_  "NmAsrCanMsgReducedTime" 320;
BA_DEF_DEF_  "NmAsrNode" "no";
BA_DEF_DEF_  "NmAsrNodeIdentifier" 50;
BA_DEF_DEF_  "NmNode" "no";
BA_DEF_DEF_  "NmStationAddress" 0;
BA_DEF_DEF_  "DBName" "";
BA_DEF_DEF_  "ILTxTimeout" 0;
BA_DEF_DEF_  "NmAsrBaseAddress" 1280;
BA_DEF_DEF_  "NmAsrCanMsgCycleTime" 640;
BA_DEF_DEF_  "NmAsrMessageCount" 128;
BA_DEF_DEF_  "NmAsrRepeatMessageTime" 3200;
BA_DEF_DEF_  "NmAsrTimeoutTime" 2000;
BA_DEF_DEF_  "NmAsrWaitBusSleepTime" 1500;
BA_DEF_DEF_  "Manufacturer" "Vector";
BA_DEF_DEF_  "NmType" "";
BA_DEF_DEF_  "Baudrate" 500000;
BA_DEF_DEF_  "BusType" "";
BA_DEF_DEF_  "NodeLayerModules" "";
BA_DEF_DEF_  "ECU" "";
BA_DEF_DEF_  "CANoeJitterMax" 0;
BA_DEF_DEF_  "CANoeJitterMin" 0;
BA_DEF_DEF_  "CANoeDrift" 0;
BA_DEF_DEF_  "CANoeStartDelay" 0;
BA_ "BusType" "CAN";
BA_ "DBName" "KLTPMS201228";
BA_ "NmStationAddress" BU_ IC 23;
BA_ "NmStationAddress" BU_ BCM 33;
BA_ "GenMsgCycleTime" BO_ 2566840343 1000;
BA_ "GenMsgCycleTime" BO_ 2566847511 1000;
BA_ "GenMsgCycleTime" BO_ 2365484055 50;
BA_ "GenMsgCycleTime" BO_ 2432639009 35;
VAL_ 3221225472 BCM_SysSt_RKE 1 "unlock" 0 "lock" ;
VAL_ 2432639009 BCM_STA_TGDoor 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_Seat_Belt 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_RRDoor 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_Right_Turn 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_RFDoor 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_Parking_Brake 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_LRDoor 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_LFDoor 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_Left_Turn 3 "Not Available" 2 "Error" 1 "Activated" 0 " De-activated" ;
VAL_ 2432639009 BCM_STA_IGN 4 "START" 3 "OFF" 2 "ACC" 1 "Reserved" 0 "ON" ;


2. DBC文件中的关键字

  • 基本关键字

    DBC-KeywordObject TypeNote
    BU_Network Node网络节点
    BO_Message帧/消息
    SG_Signal信号
    EV_Environment Variable环境变量
    SIG_GROUP_Signal Group信号组
    VAL_Signal Value Table信号值列表
  • 扩展关键字

    DBC-KeywordObject TypeNode
    VERSIONVERSIONDBC文件版本
    NS_NS_新符号定义段
    NS_DESC_NS_DESC_-
    CM_Node/Frame/Signal Comments节点/帧/信号 注释
    BA_DEF_Attribute Definitions属性定义
    BA_DEF_DEF_Attribute Default Value Definitions扩展属性缺省值定义
    BA_Attribute Value Definitions属性值定义
  • 其他关键字

    Expend-Keyword描述备注
    网络节点/网段名称Network使用数据库名称
    数据库名称DBNameBA_扩展属性定义
    帧发送类型GenMsgSendTypeBA_扩展属性定义
    帧周期GenMsgCycleTimeBA_扩展属性定义
    信号发送类型GenSigSendTypeBA_扩展属性定义
    信号初始值GenSigStartValueBA_扩展属性定义
    CAN FD帧属性VFrameFormatBA_扩展属性定义

3. 基本关键字详解

3.1 网络节点: BU_
  • 格式:
BU_ NetworkNodes
  • 说明: BU_后面是网络节点列表
3.2 报文帧定义: BO_
  • 格式:
BO_ MessageId MessageName: MessageSize Transmitter
BO_MessageIdMessageNameMessageSizeTransmitter
报文关键字帧的ID(用十进制表示)帧名帧长度(字节)发送节点
(无为Vector__XXX)
3.3 信号定义: SG_
  • 格式:
SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
  • 说明:
    ① **SG_: ** 是关键字,表示信号
    ② **SignalName: ** 信号的名字
    ③ **StartBit: ** 信号起始位
    ④ **SignalSize: ** 是信号长度
    ByteOrder: ** 1表示是Inter格式; 如果是 0, 表示是Motorrola格式
    ValueType: ** + 表示无符号数; 如果是-
    ,表示有符号数
    ⑦ **(Factor, Offset): **原始值与物理值之间的转换, 物理值 = 原始值*因子Factor + 偏移量Offset
    ⑧ **[Min,Max]: ** 表示【最小值,最大值】, double类型
    ⑨ **unit/引号: **之间的是单位,为字符串类型
    ⑩ **Receiver: ** 表示该信号的接收节点,如果没有接受节点,必须设置为Vector_xxx
3.4 对报文或者信号的注释: CM_
  • 格式:
CM_ Object MessageId/NodeName “Comment”
  • 说明:
    CM_: ** 是关键字,表示cmments
    Object: ** 注解对象可以为节点BU_ 报文BO_ 与 消息SG_

    MessageId/NodeName: 报文ID或者节点名字
    “Comment”: 注解信息
3.5 属性值: BA_
  • 格式
BA_ Name ObjectType ObjectName AttributeValue;
  • 说明
    CM_: ** 是关键字,表示cmments
    Object: ** 注解对象可以为节点BU_ 报文BO_ 与 消息SG_

    MessageId/NodeName: 报文信号帧的ID或者节点名字
    “Comment” 注释信息
3.6 属性定义: BA_DEF_
  • 格式:
BA_DEF_ Object AttributeName ValueType Min Max;
  • 说明:
    BA_DEF_: ** 是关键字,表示s属性定义
    Object: ** 对象类型,可以为节点BU_
    、消息SG_或者网络节点“ ”
    AttributeName: 属性名字
    ValueType: 是属性值类型:整型、字符串、浮点型、枚举类型等
    Min Max: 属性值的上下值,字符串无
3.7 属性初始值定义: BA_DEF_DEF_
  • 格式:
BA_DEF_DEF_ AttributeName DefaultValue;
  • 说明:
    BA_DEF_DEF_: 是关键字,表示属性的初始值
    AttributeName: 属性名称
    DefaultValue: 属性的初始值
3.8 数值表: VAL_
  • 格式:
VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
  • 说明:
    VAL_: 是关键字,表示数值表
    MessageId: 信号所属于的报文ID
    SignalName 信号名字
    N “DefineN” …… 0 “Define0”: 信号数值表

未完待续…

<think>好的,我需要帮助用户查找与CAN数据库定义相关的关键字列表,特别是关于DBC文件格式的内容。根据用户提供的引用内容,引用[1]提到DBC文件通常包含8种信息,包括版本、波特率、网络节点、报文帧、信号、注解、属性定义和数值表部分。而引用[2]则给出了具体的属性定义语法,比如BA_DEF_和BA_DEF_DEF_。 首先,我需要确认DBC文件中常用的关键字有哪些。根据引用[1]中的分类,每个部分对应的关键字可能不同。例如,波特率定义可能涉及关键字“BS_”,网络节点可能使用“BU_”,报文帧可能是“BO_”,信号则是“SG_”。此外,属性定义部分的关键字在引用[2]中提到的是“BA_DEF_”和“BA_DEF_DEF_”。 接下来,我需要验证这些关键字是否符合DBC文件的规范。比如,“BS_”通常用于定义波特率,“BU_”用于声明网络节点,“BO_”定义报文帧,“SG_”定义信号,这些是DBC文件中的标准部分。数值表部分可能使用“VAL_”关键字,注解部分可能是“CM_”。 然后,用户可能需要这些关键字的详细说明和用法示例。例如,“BO_”后面通常跟着报文ID、报文名称、报文长度等信息。信号定义“SG_”会包括信号名称、起始位、长度、字节顺序、数据类型、最小物理值、最大物理值、单位和接收节点等属性。 还需要考虑是否有其他关键字可能被遗漏,比如环境变量“EV_”、信号组“SIG_GROUP_”、注释“CM_”等。这些也是DBC文件中常见的部分,应该包含在关键字列表中。 最后,整理这些信息,确保每个关键字都有对应的功能描述,并引用用户提供的参考资料来支持答案的准确性。同时,生成相关问题,帮助用户进一步理解DBC文件的结构和应用。</think>### 关于CAN数据库定义的关键字列表(DBC文件格式) 根据DBC文件格式规范,以下是其核心关键字列表及功能说明(基于引用内容整理): --- #### **1. 基础结构定义** - **`VERSION`** 定义DBC文件的版本信息,例如: ```dbc VERSION "1.0" ``` - **`BS_`** 定义总线波特率,例如: ```dbc BS_: 500000 // 波特率为500kbps ``` - **`BU_`** 声明网络中的节点(ECU),例如: ```dbc BU_: ECU1 ECU2 // 定义两个节点ECU1和ECU2 ``` --- #### **2. 报文与信号定义** - **`BO_`** 定义报文帧(Message),格式为: ```dbc BO_ ID Name: DLC Transmitter // 示例:BO_ 256 MSG_Engine: 8 ECU1 ``` 其中: - `ID`:报文ID(十进制或十六进制) - `DLC`:数据长度(字节数) - `Transmitter`:发送节点名称 - **`SG_`** 定义信号(Signal),格式为: ```dbc SG_ SignalName : StartBit|Length@ByteOrder DataType (Min,Max) [Unit] Receiver // 示例:SG_ EngineSpeed : 8|16@1+ (0,8000) [rpm] ECU2 ``` 参数说明: - `ByteOrder`:`0`(大端)或`1`(小端) - `DataType`:`+`(无符号)或`-`(有符号) - `Receiver`:接收节点列表 --- #### **3. 属性与注释** - **`BA_DEF_`** 定义属性类型,例如: ```dbc BA_DEF_ ECU1 "AttributeName" ENUM "A","B","C"; // 枚举类型属性 BA_DEF_ BO_ "Timeout" INT 0 1000; // 整数类型属性 ``` 引用自属性定义规范[^2]。 - **`BA_DEF_DEF_`** 设置属性的默认值,例如: ```dbc BA_DEF_DEF_ "Timeout" 100; ``` - **`CM_`** 添加注释,例如: ```dbc CM_ BU_ ECU1 "Engine Control Unit"; // 对节点ECU1的注释 ``` --- #### **4. 数值表与编码** - **`VAL_`** 定义信号值到物理含义的映射,例如: ```dbc VAL_ 256 SignalName 0 "Off" 1 "On"; // 报文ID为256的信号编码 ``` --- #### **5. 其他扩展关键字** - **`EV_`** 定义环境变量(如传感器校准参数)。 - **`SIG_GROUP_`** 将信号分组管理。 - **`NS_`** 声明新符号或扩展功能(较少使用)。 --- ### 总结 DBC文件通过上述关键字实现完整的CAN通信描述,涵盖网络拓扑、报文帧、信号属性及注释等[^1][^2]。实际解析时需注意语法严格性,例如分号`;`和空格的使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值