cmake - cmake中十进制转十六进制

标签 cmake

他们:
是否可以在 CMake 中将一个十进制为 16 的变量 A 转换为十六进制,反之亦然?

谷歌搜索只引导我到以下几点:

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

哪个不做转换。

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

最佳答案

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

    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)

关于cmake - cmake中十进制转十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26182289/

相关文章:

c++ - 在 VirtualBox 的共享文件夹中构建符号链接(symbolic link)共享库

c++ - CMake - 链接错误和 undefined reference

cmake - premake4 外源构建

c++ - 如何配置 CMake 以便生成的 Visual Studio 项目找到可执行文件?

CMake 无法在 Windows 上创建 MakeFile

c++ - 在 Linux 中构建时出现 Mysqlcppconn8 和 cmake 错误

c++ - Cmake:在没有直接 target_link_libraries 的情况下使用来自另一个目标的函数

bash - Jenkins : Environment variables not available in CMake

c++ - CMake + Qt + GTest 文件链接

makefile - 与旧版本相比,CMake 3.16 在 Makefile 的生成阶段慢了几个数量级