他们:
是否可以在 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/