将signed int number转换为unsigned whith shell脚本

时间:2016-09-21 07:07:16

标签: bash shell awk sh

我需要使用shell脚本将签名的int32号转换为unsigned

例如:

convert  Input : -256
Expected output: 4294967040

2 个答案:

答案 0 :(得分:3)

这可以帮到你;

#!/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

答案 1 :(得分:1)

在这里,可能不是最快的,但似乎有效

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