从c到python的枚举(2.7)

2024-09-30 20:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有用C编写的代码,现在我需要将它移植到PYTHON。 C代码有不能直接在python中实现的枚举

有没有办法在python中实现enum并创建它的实例,如下面的c代码所示SerialProcessState serialProcessState = SerialProcessState.SERIAL_PROCESS_SEARCH_START;

有人能帮我用python实现这些东西吗?在

enum SerialProcessState
    {
        SERIAL_PROCESS_SEARCH_START,
        SERIAL_PROCESS_VERIFY_ELEMENTS,
        SERIAL_PROCESS_DATA,
        SERIAL_PROCESS_SEARCH_END}

    ;
SerialProcessState serialProcessState = SerialProcessState.SERIAL_PROCESS_SEARCH_START;

enum SerialProcessValue
    {
        SERIAL_PACKET_START = 0xF0,
        SERIAL_PACKET_END = 0xF1,
        SERIAL_PACKET_ESCAPE = 0xF2,
        SERIAL_PACKET_ESCAPE_START = 0x00,
        SERIAL_PACKET_ESCAPE_END = 0x01,
        SERIAL_PACKET_ESCAPE_ESCAPE = 0x02,
        SERIAL_PACKET_ELEMENTS = 0x06}

    ;

private void SerialProcess(byte serialData)
    {
        UInt16 Dummy;

        for (Dummy = 0; Dummy < 63; Dummy++) {
            serialhistory[Dummy] = serialhistory[Dummy + 1];
        }
        serialhistory[63] = serialData;

        if ((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_START) {
            serialProcessState = SerialProcessState.SERIAL_PROCESS_SEARCH_START;
            serialEscaped = false;
        }

        switch (serialProcessState) {
            case SerialProcessState.SERIAL_PROCESS_SEARCH_START:
                if ((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_START) {
                    checksum = 0;
                    serialProcessState = SerialProcessState.SERIAL_PROCESS_VERIFY_ELEMENTS;
                }
                break;
  .
  .

}

Tags: 代码searchpacketserialenumelementsprocessstart
1条回答
网友
1楼 · 发布于 2024-09-30 20:21:19

使用backported Enum*:

from enum import Enum, IntEnum

class SerialProcessState(Enum):
    search_start = 1
    verify_elements = 2
    data = 3
    search_end = 4

class SerialProcessValue(IntEnum):
    packet_start = 0xF0
    packet_end = 0xF1
    ...

然后您可以以SerialProcessValue.packet_startSerialProcessState.search_end的形式访问它们。在

*后端口的包名是enum34。在

相关问题 更多 >