Y:是否可以采用带有16位十进制的变量A并将其转换为10十六进制,反之亦然,在CMake中?
Google搜索只引导我进行以下操作:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |