proc hextrans {val {a "0"} {d "0"} {h "0"}} {
array set transtable {}
createtable transtable "ABCDEF" "ABCDEF"
createtable transtable "0123456789" "0123456789"
createtable transtable "0123456789" "ABCDEF"
createtable transtable "ABCDEF" "0123456789"
if {$a > 0} {
foreach id [array name transtable] {
set hx [lindex [split $id ","] 0]
if {[string compare $transtable($id) $val] == 0} {
regsub -all "\"" $hx "" hx
set dec [format %d $hx]
return [list hex=$hx dec=$dec]
}
}
}
if {$d > 0} {
foreach id [array name transtable] {
set hx [lindex [split $id ","] 0]
if {[string compare $transtable($id) $val] == 0} {
regsub -all "\"" $hx "" hx
set cha [format %c $hx]
return [list hex=$hx ascii=$cha]
}
}
}
set rlist {}
if {$h > 0} {
foreach id [array name transtable] {
set hx [lindex [split $id ","] 0]
regsub -all "\"" $hx "" hx
if {[string compare $hx $val] == 0} {
lappend rlist $transtable($id)
}
}
return $rlist
}
return
}
proc createtable {arr list1 list2} {
upvar 1 $arr loc
set cnt [array size loc]
foreach val [split $list1 ""] {
foreach out [split $list2 ""] {
set loc("0x$val$out",[incr cnt]) [format %c "0x$val$out"]
set loc("0x$val$out",[incr cnt]) [format %d "0x$val$out"]
}
}
return
}
hextrans A 1 0 0
0x41 65
hextrans 65 0 1 0
0x41 A
hextrans 0x41 0 0 1
A 65
Two years old code, so it's ugly, but it works alright.
HTH.