user: 请将以下的汇编代码转换成C语言代码:

```asm
<hexBin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L18
L74:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x16,%eax
  ja     L179
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D23(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D23(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x20(%rbp),%rax
  lea    D171(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D170(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D162(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D43(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D121(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D88(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D29(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D50(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D69(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D178(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D87(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L179
  mov    -0x20(%rbp),%rax
  lea    D71(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  nop
L179:
  addq   $0x4,-0x20(%rbp)
  addq   $0x1,-0x8(%rbp)
L18:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L74
  nop
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D171
type: string
name: retrieve_data
arguments: data_label: D170
type: string
name: retrieve_data
arguments: data_label: D20
type: string
name: retrieve_data
arguments: data_label: D162
type: string
name: retrieve_data
arguments: data_label: D73
type: string
name: retrieve_data
arguments: data_label: D43
type: string
name: retrieve_data
arguments: data_label: D121
type: string
name: retrieve_data
arguments: data_label: D18
type: string
name: retrieve_data
arguments: data_label: D88
type: string
name: retrieve_data
arguments: data_label: D29
type: string
name: retrieve_data
arguments: data_label: D50
type: string
name: retrieve_data
arguments: data_label: D69
type: string
name: retrieve_data
arguments: data_label: D53
type: string
name: retrieve_data
arguments: data_label: D178
type: string
name: retrieve_data
arguments: data_label: D87
type: string
name: retrieve_data
arguments: data_label: D71
type: string

tool: D171: 0000

tool: D170: 0001

tool: D20: 0010

tool: D162: 0011

tool: D73: 0100

tool: D43: 0101

tool: D121: 0110

tool: D18: 0111

tool: D88: 1000

tool: D29: 1001

tool: D50: 1010

tool: D69: 1011

tool: D53: 1100

tool: D178: 1101

tool: D87: 1110

tool: D71: 1111

assistant: ```c
void hexBin(char *hexstring, char *binstring) {
  char *nchar = hexstring;
  while (*nchar) {
    switch (*nchar) {
    case '0':
      strcpy(binstring, "0000");
      break;
    case '1':
      strcpy(binstring, "0001");
      break;
    case '2':
      strcpy(binstring, "0010");
      break;
    case '3':
      strcpy(binstring, "0011");
      break;
    case '4':
      strcpy(binstring, "0100");
      break;
    case '5':
      strcpy(binstring, "0101");
      break;
    case '6':
      strcpy(binstring, "0110");
      break;
    case '7':
      strcpy(binstring, "0111");
      break;
    case '8':
      strcpy(binstring, "1000");
      break;
    case '9':
      strcpy(binstring, "1001");
      break;
    case 'A':
      strcpy(binstring, "1010");
      break;
    case 'B':
      strcpy(binstring, "1011");
      break;
    case 'C':
      strcpy(binstring, "1100");
      break;
    case 'D':
      strcpy(binstring, "1101");
      break;
    case 'E':
      strcpy(binstring, "1110");
      break;
    case 'F':
      strcpy(binstring, "1111");
      break;
    }
    binstring += 4;
    nchar++;
  }
}
```