Welcome, guest | Sign In | My Account | Store | Cart

Code to convert a string of '0's and '1's to the corresponding hex number, and back. Note that we are _not_ talking about binary strings. Code by Jeff Hobbs, from his bag of utilities.

Tcl, 60 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60``` ```# bin2hex -- # converts binary to hex number # Arguments: # bin number in binary format # Returns: # hexadecimal number # proc bin2hex bin { ## No sanity checking is done array set t { 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 a 1011 b 1100 c 1101 d 1110 e 1111 f } set diff [expr {4-[string length \$bin]%4}] if {\$diff != 4} { set bin [format %0\${diff}d\$bin 0] } regsub -all .... \$bin {\$t(&)} hex return [subst \$hex] } # hex2bin -- # converts hex number to bin # Arguments: # hex number in hex format # Returns: # binary number (in chars, not binary format) # proc hex2bin hex { set t [list 0 0000 1 0001 2 0010 3 0011 4 0100 \ 5 0101 6 0110 7 0111 8 1000 9 1001 \ a 1010 b 1011 c 1100 d 1101 e 1110 f 1111 \ A 1010 B 1011 C 1100 D 1101 E 1110 F 1111] regsub {^0[xX]} \$hex {} hex return [string map -nocase \$t \$hex] } # hex2bin-alternate -- # converts hex number to bin # Arguments: # hex number in hex format # Returns: # binary number (in chars, not binary format) # proc bin2hex-alternate bin { ## No sanity checking is done set t { 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 a 1011 b 1100 c 1101 d 1110 e 1111 f } set diff [expr {4-[string length \$bin]%4}] if {\$diff != 4} { set bin [format %0\${diff}d\$bin 0] } return [string map \$t \$hex] } ```

Bin2Hex is a bit of old-style, with its use of regsub/subst. [string map] can be used for this too. See the alternate implementation.

#### 1 comment

George Smith 18 years, 7 months ago

bin2hex-alternate has problems. Looks to me like bin2hex-alternate has a couple of problems:

``````1) the return statement references \$hex instead of \$bin
2) the comment header is for hex2bin-alternate while the function
defined is bin2hex-alternate.
``````
 Created by andreas kupries on Wed, 21 Aug 2002 (MIT)

### Tags

▶ Show machine tags (4)

### Required Modules

• (none specified)