LINUX.ORG.RU

Аналог atoi() в Bash


0

1

Считал из файла в переменную шестнадцатеричное число, например fffffe6d.

var=$(< file)
Как теперь привести эту строку к численному типу для последующей мат. обработки?

Все равно же в bc считать будете?

Eddy_Em ☆☆☆☆☆
()

Велосипед:

function conv(){ N=$(echo "$1" | tr [[:lower:]] [[:upper:]]); echo "obase=10; ibase=16; $N" | bc; }

conv ff
255

conv fffffe6d
4294966893

Eddy_Em ☆☆☆☆☆
()
$ printf "%d\n" 0xfffffe6d
4294966893
imb ★★
()

echo $(( 0x${var} ))

mky ★★★★★
()
Ответ на: комментарий от ABW
$ var=fffffe6d;A=$(printf "%d\n" 0x$var);echo $A
4294966893

$ var=ffff;A=$(printf "%d\n" 0x$var);echo $A
65535
imb ★★
()

$ let a=0xffff
$ echo $a
65535
$ a=$(( 0xff ))
$ echo $a
255

Первое башизм, второе корректно с точки зрения позикса

kim-roader ★★
()
Ответ на: комментарий от kim-roader

Как все, оказывается, элементарно...

А bash, оказывается, long использует:

echo $(( 0xfffffffffffffff ))
1152921504606846975

echo $(( 0xffffffffffffffff ))
-1

Зато мой велосипед с еще большими числами работает:

conv fffffffffffffffffffff
19342813113834066795298815

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Зато мой велосипед с еще большими числами работает

Твой велосипед работает с длинной арифметикой. Так что он будет работать на совсем любых числах.

kim-roader ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.