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

```asm
<hex2bit>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L85
L77:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,0x3(%rax)
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  movzbl 0x3(%rax),%eax
  mov    %al,0x2(%rdx)
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl 0x2(%rdx),%edx
  mov    %dl,0x1(%rax)
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  movzbl 0x1(%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x10(%rbp)
L85:
  cmpl   $0x1f,-0x10(%rbp)
  jle    L77
  movl   $0x0,-0xc(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x22,%eax
  jg     L98
  movl   $0x0,-0x8(%rbp)
  jmp    L91
L98:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x42,%eax
  jg     L5
  movl   $0x1,-0x8(%rbp)
  jmp    L91
L5:
  movl   $0x4,-0x8(%rbp)
L91:
  cmpl   $0x1,-0x8(%rbp)
  setle  %al
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
  movl   $0x8,-0x10(%rbp)
  jmp    L36
L96:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  lea    D7(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  addl   $0x2,-0xc(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jle    L3
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x1,%eax
  cltq
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  lea    D7(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  addl   $0x2,-0xc(%rbp)
L3:
  cmpl   $0x1,-0x8(%rbp)
  jle    L44
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x2,%eax
  cltq
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  lea    D7(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  addl   $0x2,-0xc(%rbp)
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  add    $0x3,%eax
  cltq
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  lea    D7(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  addl   $0x2,-0xc(%rbp)
L44:
  addl   $0x1,-0x10(%rbp)
L36:
  cmpl   $0x17,-0x10(%rbp)
  jle    L96
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D7
type_infered: string

tool: D7: %2hhx

assistant: ```c
int hex2bit(char *instring, unsigned char character[32][4]) {
  int i;
  int j;
  int k;
  int width;
  for (i = 0; i < 32; i++)
    character[i][0] = character[i][1] = character[i][2] = character[i][3] = 0;
  j = 0;
  if (strlen(instring) <= 34)
    width = 0;
  else if (strlen(instring) <= 66)
    width = 1;
  else
    width = 4;
  k = (width > 1) ? 0 : 1;
  for (i = 8; i < 24; i++) {
    sscanf(&instring[j], "%2hhx", &character[i][k]);
    j += 2;
    if (width > 0) {
      sscanf(&instring[j], "%2hhx", &character[i][k + 1]);
      j += 2;
    }
    if (width > 1) {
      sscanf(&instring[j], "%2hhx", &character[i][k + 2]);
      j += 2;
      sscanf(&instring[j], "%2hhx", &character[i][k + 3]);
      j += 2;
    }
  }
  return (0);
}
```