Hi @tshiono, again excellent work, and it's very fast too.

First, I wanted to thank for not only creating an elegant
solution, but one that also covers the extra credit as demonstrated
here. You have passed nonconsecutive and range values for both
samples and channels:

[root@usreliance Biorad]# ./sample17.sh -s 1,3,5,7-9 -c 0,2-3 samples.bin
                Ch0     Ch2     Ch3
Sample 1:       0x4b03  0x1e03  0x0904
Sample 3:       0x1e03  0x3303  0xad03
Sample 5:       0xe003  0x3403  0xc403
Sample 7:       0x1003  0x4203  0x5803
Sample 8:       0x2303  0x5703  0x6203
Sample 9:       0x1703  0x3103  0x3303

Here are a couple scenarios which I believe can be easily fixed:

The following run returned only the channel headers.

[root@usreliance Biorad]# ./sample17.sh -s 1,3,5 -c 0-3 samples.bin
                Ch0     Ch1     Ch2     Ch3
				
Here I was trying to see if I maybe left "-c" off, the script
would consider that "all channels" or "-c 0-3", but no joy.

[root@usreliance Biorad]# ./sample17.sh -s 1,3,5  samples.bin
                Ch0     Ch1     Ch2     Ch3
				
On this one I was just passing channels 1, 3, and 5, along with
channels 0 and 3.

[root@usreliance Biorad]# ./sample17.sh -s 1,3,5  -c 0,3 samples.bin
                Ch0     Ch3
				
This one is partially right, but it doesn't list samples 3 and 5.

[root@usreliance Biorad]# ./sample17.sh -s 0,3,5  -c 0,3 samples.bin
                Ch0     Ch3
Sample 0:       0x1a03  0x5703

If you want me to create a new question I will. I'm hoping that this
can be easily remedied though by a couple of minor tweaks. What do you think?

My son is indepently working on a solution, and he was asking if you would be so 
kind as to look at where he is stuck. He had this working at one point, but then 
something happened and now his script is broken. He's trying to run his script and 
have a couple of stats returned at the bottom of the sample results. He never reached
the point where he can pass nonconsecutive values, but he did get the script
at one point to do the following:

[root@usreliance Biorad]# ./sample15.sh -s 0-9 -c 2-3
                Ch2     Ch3
Sample 0:       0x4a03  0x5703
Sample 1:       0x1e03  0x0904
Sample 2:       0x4003  0xae03
Sample 3:       0x3303  0xad03
Sample 4:       0x4303  0x6203
Sample 5:       0x3403  0xc403
Sample 6:       0x5303  0x6103
Sample 7:       0x4203  0x5803
Sample 8:       0x5703  0x6203
Sample 9:       0x3103  0x3303
Total samples in samples.bin: 374371
Total samples iterated: 10

Here is his script sample15.sh in it's current state:

#!/usr/bin/env bash
samps=""
chans=""
total=""

while getopts cstr opt; do
    case $opt in
        s) samps="$OPTARG" ;;
        c) chans="$OPTARG" ;;
        t) total=$(hexdump -v -e '8/1 "%02x " "\n"' samples.bin | wc -l) ;;
        r) {
             printf "Total Samples in Record:\t"$(hexdump -v -e '8/1 "%02x " "\n"' samples.bin | wc -l)"\n"
             exit
           } ;;
        *) printf 'Unrecognized option "%s"\n' "$opt" >&2
    esac
done
shift $(( OPTIND - 1 ))

hexdump -v -e '8/1 "%02x " "\n"' samples.bin |
awk -v samps="$samps" -v chans="$chans" -v totalIterated="$total" '
  BEGIN {
    if (totalIterated != "") {
      totalRecords = totalIterated
      totalIterated = 0
    }

    # split sample string to arrays using "-" as delimiter
    split(samps, srange, "-")
    # split channel string
    split(chans, crange, "-")

    # arbitrary INT_MAX
    samples_max=(totalIterated != ""?totalRecords:2^52)
    # default 4 channels as per prerequisite example
    chan_default=4

    # set default samples
    if (!srange[1]) srange[1] = 0
    if (!srange[2]) srange[2] = samples_max
    # set default channels
    if (!crange[1]) crange[1] = 0
    if (!crange[2]) crange[2] = crange[1] + chan_default-1

    # print channel header row
    printf "\t\t"
    for (i=crange[1]; i<=crange[2]; i++) {
      printf("Ch%d%s", i, (i==crange[2]?"\n":"\t"))
    }
  }
  {
    if(NR >= srange[1] + 1 && NR <= srange[2] + 1) {
      if (totalIterated != "") ++totalIterated
      start=(crange[1] + 1) * 2 - 1
      end=(crange[2] + 1 ) * 2

      # print sample range
      printf("Sample %d:\t", NR-1)

      # print channel range in sample line
      for (i = start; i <= end; i+=2) {
          j = i + 1
          printf("0x%s%s%s", $i, $j, (i==end||j==end?"\n":"\t"))
      }
    }
  }
  END {
    if (totalIterated != "")
      printf("Total Samples in Record:\t%d\nTotal Samples Processed:\t%d\n", totalRecords, totalIterated)
  }
'

Thank you @tshiono, I really appreciate all of your help.