cvex ← {width} ##.hex nums ⍝ Hexadecimal from decimal.
nums ← {signed←0} ##.dec cvex ⍝ Decimal from hexadecimal.
[hex] and [dec] convert between arrays of decimal numbers and their hexadecimal
equivalents.
Hex's optional left argument {width} specifies the number of hexadecimal digits
required. Width defaults to 2, 4, 8 or 16 depending on the magnitude of the arg-
ument.
Dec's optional left argument {signed} determines whether a hexadecimal number
whose first digit is in the range 8..f is to be interpreted as a signed or un-
signed (default) number.
Restriction: [hex] will not accept numbers whose magnitude means that adding 1
will make no difference: a maximum of around 2*53 for a number of ⎕DR-type 645.
Examples:
hex 12 34 56 ⍝ (result is nested).
┌──┬──┬──┐
│0c│22│38│
└──┴──┴──┘
hex 100×⍳6 ⍝ larger numbers.
┌────┬────┬────┬────┬────┬────┐
│0064│00c8│012c│0190│01f4│0258│
└────┴────┴────┴────┴────┴────┘
hex 100000×⍳4 ⍝ even larger numbers.
┌────────┬────────┬────────┬────────┐
│000186a0│00030d40│000493e0│00061a80│
└────────┴────────┴────────┴────────┘
hex 4 5⍴⍳20 ⍝ array of numbers.
┌──┬──┬──┬──┬──┐
│01│02│03│04│05│
├──┼──┼──┼──┼──┤
│06│07│08│09│0a│
├──┼──┼──┼──┼──┤
│0b│0c│0d│0e│0f│
├──┼──┼──┼──┼──┤
│10│11│12│13│14│
└──┴──┴──┴──┴──┘
4 hex 4 5⍴⍳20 ⍝ specify width.
┌────┬────┬────┬────┬────┐
│0001│0002│0003│0004│0005│
├────┼────┼────┼────┼────┤
│0006│0007│0008│0009│000a│
├────┼────┼────┼────┼────┤
│000b│000c│000d│000e│000f│
├────┼────┼────┼────┼────┤
│0010│0011│0012│0013│0014│
└────┴────┴────┴────┴────┘
dec 'ace' 'ACE' ⍝ upper and lower case accepted
2766 2766
dec hex 2 4 5⍴⍳40 ⍝ convert both ways.
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
hex saw(1 2 3)(100 200 300) ⍝ nested array.
┌──────────┬────────────────┐
│┌──┬──┬──┐│┌────┬────┬────┐│
││01│02│03│││0064│00c8│012c││
│└──┴──┴──┘│└────┴────┴────┘│
└──────────┴────────────────┘
dec hex (1 2 3)(100 200 300) ⍝ full circle.
┌─────┬───────────┐
│1 2 3│100 200 300│
└─────┴───────────┘
⍝ hex of negative integers returns 2's complement or "unsigned" hex number:
hex ¯3 to 3 ⍝ hex of negative numbers.
┌──┬──┬──┬──┬──┬──┬──┐
│fd│fe│ff│00│01│02│03│
└──┴──┴──┴──┴──┴──┴──┘
1 dec hex ¯3 to 3 ⍝ round trip if signed.
¯3 ¯2 ¯1 0 1 2 3
0 dec hex ¯3 to 3 ⍝ non-round trip if unsigned.
253 254 255 0 1 2 3
hex 2*53 ⍝ number too big.
Too big
hex 2*53
∧
See also: int saw hexf
See also: ary phinary bt
Back to: contents
Back to: Workspaces