在cmake中从十进制转换为十六进制

Ide*_*Hat 5 cmake

Y:是否可以采用带有16位十进制的变量A并将其转换为10十六进制,反之亦然,在CMake中?

Google搜索只引导我进行以下操作:

http://public.kitware.com/pipermail/cmake/2008-September/024092.html

哪个不做转换.

X:我正在尝试使用"配置文件",将配置的值作为十进制读取,并在配置的头文件中将其输出为十六进制.

Ide*_*Hat 3

我自己推出了,但这感觉应该是内置的

    cmake_minimum_required (VERSION 2.6.4)

    macro(HEXCHAR2DEC VAR VAL)
        if (${VAL} MATCHES "[0-9]")
            SET(${VAR} ${VAL})
        elseif(${VAL} MATCHES "[aA]")
            SET(${VAR} 10)
        elseif(${VAL} MATCHES "[bB]")
            SET(${VAR} 11)
        elseif(${VAL} MATCHES "[cC]")
            SET(${VAR} 12)
        elseif(${VAL} MATCHES "[dD]")
            SET(${VAR} 13)
        elseif(${VAL} MATCHES "[eE]")
            SET(${VAR} 14)
        elseif(${VAL} MATCHES "[fF]")
            SET(${VAR} 15)
        else()
            MESSAGE(FATAL_ERROR "Invalid format for hexidecimal character")
        endif()

    endmacro(HEXCHAR2DEC)

    macro(HEX2DEC VAR VAL)

        IF (${VAL} EQUAL 0)
            SET(${VAR} 0)
        ELSE()

            SET(CURINDEX 0)
            STRING(LENGTH "${VAL}" CURLENGTH)

            SET(${VAR} 0)

            while (CURINDEX LESS  CURLENGTH)

                STRING(SUBSTRING "${VAL}" ${CURINDEX} 1 CHAR)

                HEXCHAR2DEC(CHAR ${CHAR})

                MATH(EXPR POWAH "(1<<((${CURLENGTH}-${CURINDEX}-1)*4))")
                MATH(EXPR CHAR "(${CHAR}*${POWAH})")
                MATH(EXPR ${VAR} "${${VAR}}+${CHAR}")
                MATH(EXPR CURINDEX "${CURINDEX}+1")
            endwhile()
        ENDIF()

    endmacro(HEX2DEC)

    macro(DECCHAR2HEX VAR VAL)

        if (${VAL} LESS 10)
            SET(${VAR} ${VAL})
        elseif(${VAL} EQUAL 10)
            SET(${VAR} "A")
        elseif(${VAL} EQUAL 11)
            SET(${VAR} "B")
        elseif(${VAL} EQUAL 12)
            SET(${VAR} "C")
        elseif(${VAL} EQUAL 13)
            SET(${VAR} "D")
        elseif(${VAL} EQUAL 14)
            SET(${VAR} "E")
        elseif(${VAL} EQUAL 15)
            SET(${VAR} "F")
        else()
            MESSAGE(FATAL_ERROR "Invalid format for hexidecimal character")
        endif()
    endmacro(DECCHAR2HEX)

    macro(DEC2HEX VAR VAL)
        if (${VAL} EQUAL 0)
            SET(${VAR} 0)
        ELSE()
            SET(VAL2 ${VAL})
            SET(${VAR} "")

            WHILE (${VAL2} GREATER 0)
                MATH(EXPR VALCHAR "(${VAL2}&15)")
                DECCHAR2HEX(VALCHAR ${VALCHAR})
                SET(${VAR} "${VALCHAR}${${VAR}}")
                MATH(EXPR VAL2 "${VAL2} >> 4")
            ENDWHILE()
        ENDIF()
    endmacro(DEC2HEX)
Run Code Online (Sandbox Code Playgroud)