Benim bash
kodumda bir onaltılık sayı içeren bir dizim var, ör. hex="0x12345678"
. Onaltılık bir sayı olarak ele almak ve üzerinde biraz değişiklik yapmak mümkün mü?Bash'de onaltılık sayılar üzerinde bitsel işlemleri nasıl gerçekleştirilir?
8
A
cevap
7
Kolayca bir aritmetik bağlamda, söz konusu numaraları bitshift edebilirsiniz:
$ hex="0x12345678"
$ result=$((hex << 1))
$ printf "Result in hex notation: 0x%x\n" "$result"
0x2468acf0
2
Yes.
Aritmetik ifadeler, temel 16 sayıları ve her zamanki gibi C
işleçlerini destekler.
Örnek: Elbette
$ hex="0xff"
$ echo $((hex >> 1))
127
7
(bir Aritmetik Genişleme içinde) bitsel işlemleri yapabilirsiniz:
$ echo "$((0x12345678 << 1))"
610839792
Veya: Değer, bir set olabilir
$ echo "$((16#12345678 << 1))"
610839792
Değişken:
$ var=0x12345678 # or var=16#12345678
$ echo "$((var << 1))"
610839792
Ve OR yapabilirsiniz AND ve XOR:
$ echo "$((0x123456 | 0x876543))"
9925975
Ve de hex sonucu almak için:
$ printf '%X\n' "$((0x12345678 | 0xDEADBEEF))" # Bitwise OR
DEBDFEFF
$ printf '%X\n' "$((0x12345678 & 0xDEADBEEF))" # Bitwise AND
12241668
$ printf '%X\n' "$((0x12345678^0xDEADBEEF))" # Bitwise XOR
CC99E897