user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<hex2binary>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movb   $0x0,(%rax)
  jmp    L3
L114:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x36,%eax
  ja     L107
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D176(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D176(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x10(%rbp),%rax
  lea    D129(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D24(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D27(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D5(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D11(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D138(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D74(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D174(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D104(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D166(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  jmp    L107
  mov    -0x10(%rbp),%rax
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  nop
L107:
  addq   $0x1,-0x8(%rbp)
L3:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L114
  nop
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D129
data_type: string
name: retrieve_data
arguments: data_tag: D24
data_type: string
name: retrieve_data
arguments: data_tag: D27
data_type: string
name: retrieve_data
arguments: data_tag: D12
data_type: string
name: retrieve_data
arguments: data_tag: D5
data_type: string
name: retrieve_data
arguments: data_tag: D51
data_type: string
name: retrieve_data
arguments: data_tag: D11
data_type: string
name: retrieve_data
arguments: data_tag: D138
data_type: string
name: retrieve_data
arguments: data_tag: D74
data_type: string
name: retrieve_data
arguments: data_tag: D174
data_type: string
name: retrieve_data
arguments: data_tag: D104
data_type: string
name: retrieve_data
arguments: data_tag: D6
data_type: string
name: retrieve_data
arguments: data_tag: D166
data_type: string
name: retrieve_data
arguments: data_tag: D42
data_type: string
name: retrieve_data
arguments: data_tag: D18
data_type: string
name: retrieve_data
arguments: data_tag: D15
data_type: string

tool: D129: 0000

tool: D24: 0001

tool: D27: 0010

tool: D12: 0011

tool: D5: 0100

tool: D51: 0101

tool: D11: 0110

tool: D138: 0111

tool: D74: 1000

tool: D174: 1001

tool: D104: 1010

tool: D6: 1011

tool: D166: 1100

tool: D42: 1101

tool: D18: 1110

tool: D15: 1111

assistant: ```c
void hex2binary(char *hexstr, char *binstr) {
  *binstr = 0;
  while (*hexstr) {
    switch (*hexstr) {
    case '0':
      strcat(binstr, "0000");
      break;
    case '1':
      strcat(binstr, "0001");
      break;
    case '2':
      strcat(binstr, "0010");
      break;
    case '3':
      strcat(binstr, "0011");
      break;
    case '4':
      strcat(binstr, "0100");
      break;
    case '5':
      strcat(binstr, "0101");
      break;
    case '6':
      strcat(binstr, "0110");
      break;
    case '7':
      strcat(binstr, "0111");
      break;
    case '8':
      strcat(binstr, "1000");
      break;
    case '9':
      strcat(binstr, "1001");
      break;
    case 'a':
    case 'A':
      strcat(binstr, "1010");
      break;
    case 'b':
    case 'B':
      strcat(binstr, "1011");
      break;
    case 'c':
    case 'C':
      strcat(binstr, "1100");
      break;
    case 'd':
    case 'D':
      strcat(binstr, "1101");
      break;
    case 'e':
    case 'E':
      strcat(binstr, "1110");
      break;
    case 'f':
    case 'F':
      strcat(binstr, "1111");
      break;
    }
    hexstr++;
  }
}
```