2

I need to convert signed int32 number to unsigned using shell script

for example :

convert  Input : -256
Expected output: 4294967040
Songe
  • 39
  • 1
  • 8

2 Answers2

5

this can help you;

#!/bin/bash
input=$1
if [[ $input -lt "0" ]]; then
    output=$((4294967296+$input))
else
    output=$input
fi
echo $output


#signed int32;
#–2,147,483,648 to 2,147,483,647
#unsigned int32
#0 to 4,294,967,295
Mustafa DOGRU
  • 3,994
  • 1
  • 16
  • 24
3

Here goes, probably not the quickest, but seems to work

unsigned_to_signed()
{
    local hex=$(printf "0x%x" $(( $* )))
    local unsigned=$(printf "%u" $hex )
    echo $unsigned
}

unsigned_to_signed32()
{
    local hex=$(printf "0x%x" $(( $* & 0xFFFFFFFF )))
    local unsigned=$(printf "%u" $hex )
    echo $unsigned
}

unsigned_to_signed -256
18446744073709551360

unsigned_to_signed32 -256
4294967040
Goblinhack
  • 2,859
  • 1
  • 26
  • 26