[過去ログ] シェルスクリプト総合 その31 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
633
(1): デフォルトの名無しさん [sage] 2019/09/16(月) 23:39:17.58 ID:LCUbae2V(1/3) AAS
>>630
630(1): デフォルトの名無しさん [sage] 2019/09/16(月) 19:53:43.50 ID:vTAkg/qq(1) AAS
16進数(最大二桁 0xFF)から8進数に変換したいんですが
bcを使う以外にsedなどを使った方法とかありますかね…?
$ printf 'obase=8;ibase=16;%s\n' 'FA' | bc
もしあれば,bcは16進数のアルファベットが大文字じゃないといけないし,
POSIX標準とはいえUbuntuとかには既定で導入されてないしで,
あまり使いたいくないんです(わがままですいません)
hex=fa
oct=$(( ($hex >> 6) * 100 + ($hex >> 3 & 0x7) * 10 + ($hex & 0x7) ))
# oct=$((0x$hex >> 6))$((0x$hex >> 3 & 0x7))$((0x$hex & 0x7)) 3桁固定版
echo "$oct"

出力が必須でない場合(変数に入れて処理する場合)は
oct=$(printf '%o\n' 0xfa) よりも速いはず
634
(1): デフォルトの名無しさん [sage] 2019/09/16(月) 23:43:56.37 ID:LCUbae2V(2/3) AAS
他にも case を使って書けるはず
最大0xFFなら

case $value in
01) 〜
02) 〜

[fF][eE])
[fF][fF])
esac

とかねw

たかだか256+α行。頑張ればFF の一桁ずつ処理すれば行は減らせるだろう。
635: デフォルトの名無しさん [sage] 2019/09/16(月) 23:46:42.80 ID:LCUbae2V(3/3) AAS
>>633訂正

× oct=$(( ($hex >> 6) * 100 + ($hex >> 3 & 0x7) * 10 + ($hex & 0x7) ))
○ oct=$(( (0x$hex >> 6) * 100 + (0x$hex >> 3 & 0x7) * 10 + (0x$hex & 0x7) ))
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s