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

```asm
<hex2binary>:
  endbr64
  movb   $0x0,(%rsi)
  movzbl (%rdi),%eax
  test   %al,%al
  je     L17
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%r12
  lea    D81(%rip),%rbp
  lea    D77(%rip),%r15
  lea    D112(%rip),%r14
  lea    D5(%rip),%r13
  jmp    L0
  lea    D87(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
L100:
  add    $0x1,%rbx
  movzbl (%rbx),%eax
  test   %al,%al
  je     L165
L0:
  sub    $0x30,%eax
  cmp    $0x36,%al
  ja     L100
  movzbl %al,%eax
  movslq 0x0(%rbp,%rax,4),%rax
  add    %rbp,%rax
  notrack jmp *%rax
  lea    D120(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D54(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D158(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D114(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D29(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D58(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D89(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D129(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D117(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D31(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D168(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  lea    D82(%rip),%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  jmp    L100
L165:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L17:
  ret
```

tool_calls: name: parse_data
arguments: data_label: D77
datatype: string
name: parse_data
arguments: data_label: D112
datatype: string
name: parse_data
arguments: data_label: D5
datatype: string
name: parse_data
arguments: data_label: D87
datatype: string
name: parse_data
arguments: data_label: D120
datatype: string
name: parse_data
arguments: data_label: D54
datatype: string
name: parse_data
arguments: data_label: D158
datatype: string
name: parse_data
arguments: data_label: D114
datatype: string
name: parse_data
arguments: data_label: D29
datatype: string
name: parse_data
arguments: data_label: D58
datatype: string
name: parse_data
arguments: data_label: D89
datatype: string
name: parse_data
arguments: data_label: D129
datatype: string
name: parse_data
arguments: data_label: D117
datatype: string
name: parse_data
arguments: data_label: D31
datatype: string
name: parse_data
arguments: data_label: D168
datatype: string
name: parse_data
arguments: data_label: D82
datatype: string

tool: D77: 1111

tool: D112: 1110

tool: D5: 1101

tool: D87: 0000

tool: D120: 0001

tool: D54: 0010

tool: D158: 0011

tool: D114: 0100

tool: D29: 0101

tool: D58: 0110

tool: D89: 0111

tool: D129: 1000

tool: D117: 1001

tool: D31: 1010

tool: D168: 1011

tool: D82: 1100

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++;
  }
}
```