You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.6 KiB
56 lines
1.6 KiB
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
# from https://gist.github.com/korzo89/71a6de0f388f7cf8b349101b0134060c |
|
function(from_hex HEX DEC) |
|
string(SUBSTRING "${HEX}" 2 -1 HEX) |
|
string(TOUPPER "${HEX}" HEX) |
|
set(_res 0) |
|
string(LENGTH "${HEX}" _strlen) |
|
|
|
while(_strlen GREATER 0) |
|
math(EXPR _res "${_res} * 16") |
|
string(SUBSTRING "${HEX}" 0 1 NIBBLE) |
|
string(SUBSTRING "${HEX}" 1 -1 HEX) |
|
if(NIBBLE STREQUAL "A") |
|
math(EXPR _res "${_res} + 10") |
|
elseif(NIBBLE STREQUAL "B") |
|
math(EXPR _res "${_res} + 11") |
|
elseif(NIBBLE STREQUAL "C") |
|
math(EXPR _res "${_res} + 12") |
|
elseif(NIBBLE STREQUAL "D") |
|
math(EXPR _res "${_res} + 13") |
|
elseif(NIBBLE STREQUAL "E") |
|
math(EXPR _res "${_res} + 14") |
|
elseif(NIBBLE STREQUAL "F") |
|
math(EXPR _res "${_res} + 15") |
|
else() |
|
math(EXPR _res "${_res} + ${NIBBLE}") |
|
endif() |
|
|
|
string(LENGTH "${HEX}" _strlen) |
|
endwhile() |
|
|
|
set(${DEC} ${_res} PARENT_SCOPE) |
|
endfunction() |
|
|
|
function(to_hex DEC HEX) |
|
while(DEC GREATER 0) |
|
math(EXPR _val "${DEC} % 16") |
|
math(EXPR DEC "${DEC} / 16") |
|
if(_val EQUAL 10) |
|
set(_val "A") |
|
elseif(_val EQUAL 11) |
|
set(_val "B") |
|
elseif(_val EQUAL 12) |
|
set(_val "C") |
|
elseif(_val EQUAL 13) |
|
set(_val "D") |
|
elseif(_val EQUAL 14) |
|
set(_val "E") |
|
elseif(_val EQUAL 15) |
|
set(_val "F") |
|
endif() |
|
set(_res "${_val}${_res}") |
|
endwhile() |
|
set(${HEX} "0x${_res}" PARENT_SCOPE) |
|
endfunction()
|
|
|