PoshCode Archive  Artifact Content

Artifact 9f401106ad5ebf5d260ad3d4ee41a6b0b3eb03ba198ae7340aacfb72772f34f6:

  • File hex2dec.ps1 — part of check-in [21d63f9e16] at 2018-06-10 13:31:27 on branch trunk — This script is analog of Sysinternals hex2dec but with additional feature – interactive mode. At last it has been wrote on command language, no C\C++ (some bugs fixed). (user: greg zakharov size: 3322)

# encoding: ascii
# api: powershell
# title: hex2dec
# description: This script is analog of Sysinternals hex2dec but with additional feature – interactive mode. At last it has been wrote on command language, no C\C++ (some bugs fixed).
# version: 1.11
# author: greg zakharov
# license: CC0
# x-poshcode-id: 3811
# x-archived: 2012-12-06T03:25:06
# x-published: 2012-12-04T06:51:00
#
#
@echo off
 ::unequal symbols
 for %%i in ("!", "x") do if "%1" equ "%%~i" goto:error
 ::display help information args
 for %%i in ("-h", "/h", "-help", "/help") do (
   if "%1" equ "%%~i" if not defined run goto:help
 )
 if "%1" equ "-?" if not defined run goto:help
 if "%1" equ "/?" if not defined run goto:help
 ::interactive mode
 if "%1" equ "" (
   if not defined run goto:interactive
   goto:error
 )
 ::parsing input data
 setlocal enabledelayedexpansion
  ::verify arguments length
  set "args=0"
  for %%i in (%*) do set /a "args+=1"
  if "%args%" neq "1" if not defined run goto:help
  if "%args%" neq "1" if defined run goto:error
  ::checking is arg hex or dec
  2>nul set /a "res=%1"
  if "%1" equ "%res%" goto:dec2hex
  ::patterns
  echo "%1" | findstr /r \x > nul
  set e1=%errorlevel%
  echo "%1" | findstr /r [0-9a-f] > nul
  set e2=%errorlevel%
  echo "%1" | findstr /r [g-wyz] > nul
  set e3=%errorlevel%
  ::debugging info section
  rem # echo %e1% %e2% %e3%
  ::parsing error codes
  if %e1% equ 0 if %e2% equ 0 if %e3% equ 1 set "k=%1"   & goto:hex2dec
  if %e1% equ 1 if %e2% equ 0 if %e3% equ 1 set "k=0x%1" & goto:hex2dec
  goto:error

  :dec2hex
  2>nul set /a "num=%1"
  set "map=0123456789ABCDEF"
  for /l %%i in (1, 1, 8) do (
    set /a "res=num & 15, num >>=4"
    for %%j in (!res!) do set "hex=!map:~%%j,1!!hex!"
  )
  for /f "tokens=* delims=0" %%i in ("!hex!") do set "hex=0x%%i"
  echo %1 = !hex! & goto:eof

  :hex2dec
  set "num=%k%"
  if "%num:~0,1%" equ "x" goto:error
  2>nul set /a "res=%k%"
  for /f "tokens=2,3" %%i in ('findstr "# " "%~dpnx0"') do set "num=!num:%%i=%%j!"
  if "%res%" neq "" (echo !num! = !res!) else goto:error
 endlocal
exit /b

:error
  if defined run echo =^>err & goto:eof
  echo Invalid data.
exit /b 1

:help
::Hex2dec v1.11 - converts hex to decimal and vice versa
::Copyright (C) 2012 Greg Zakharov
::
::Usage: hex2dec [decimal | hexadecimal]
::
::Example 1:
::  C:\>hex2dec 0x017a
::  0x017A = 378
::
::Example 2:
::  C:\>hex2dec 13550
::  13550 = 0x34EE
::
::Example 3:
::  C:\>hex2dec 23f
::  0x23F = 575
::
::Note: hex2dec starts with interactive mode if there is
::no argument.
for /f "tokens=* delims=:" %%i in ('findstr "^::" "%~dpnx0"') do echo.%%i
exit /b 0

rem :: Upper case chart ::
# a A
# b B
# c C
# d D
# e E
# f F
rem ::   End of chart   ::

:interactive
 ::interactive mode on
 echo Hex2dec v1.11 - converts hex to decimal and vice versa
 echo.
 echo Enter decimal or hexademical number and press Enter to
 echo take result. Use "exit" or "clear" commands to quit or
 echo to make host clear.
 echo.
 setlocal
  ::already launched marker
  set "run=true"
  :begin
  set /p "ask=>>> "
  cmd /c "%~dpnx0" %ask%
  if "%ask%" equ "clear" cls
  if "%ask%" equ "exit"  cls & goto:eof
  echo.
  goto:begin
 endlocal
exit /b