Как преобразовать двоичный код в гекс в пакетном или Powershell? - PullRequest
0 голосов
/ 17 мая 2019

Мне интересно, есть ли способ преобразования двоичного числа в шестнадцатеричное, на языке Batch или Powershell.

Exemple :
10000100 to 84
01010101 to 55
101111111111 to BFF

Проще говоря, я не очень хорош в Batch или Powershell.

Буду признателен за любую информацию

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Преобразование двоичной строки в целое число довольно просто:

$number = [Convert]::ToInt32('10000100', 2)

Теперь нам просто нужно преобразовать его в шестнадцатеричное:

$number.ToString('X')

или

'{0:X}' -f $number
0 голосов
/ 17 мая 2019

(чистая партия)

@ECHO OFF
SETLOCAL
CALL :CONVERT 10000100
CALL :CONVERT 101111111111
CALL :CONVERT 1111111111
GOTO :EOF

:: Convert %1 to hex
:CONVERT
SET "data=%1"
SET "result="

:cvtlp
:: If there are no characters left in `data` we are finished
IF NOT DEFINED data ECHO %1 ----^> %result%&GOTO :EOF 

:: Get the last 4 characters of `data` and prefix with "000"
:: This way, if there are only say 2 characters left (xx), the result will be
:: 000xx. we then use the last 4 characters only
=
SET "hex4=000%data:~-4%"
SET "hex4=%hex4:~-4%"

:: remove last 4 characters from `data`

SET "data=%data:~0,-4%"
:: now convert to hex

FOR %%a IN (0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111
            8 1000 9 1001 A 1010 B 1011 C 1010 D 1101 E 1110 F 1111
) DO IF "%%a"=="%hex4%" (GOTO found) ELSE (SET "hex4=%%a")
:found
SET "result=%hex4%%result%"
GOTO cvtlp

В этом решении используется цикл синтаксического анализа в цикле for %%a. исходное значение hex4 сравнивается в if, а в случае сбоя if проверенное значение присваивается hex4, поэтому при обнаружении совпадения предыдущее проверенное значение остаетсяв hex4.

...