user: Please show me the C implementation that matches the assembly code listed below:

```asm
<hextoi_md5>:
  endbr64
  movzbl (%rdi),%ecx
  mov    %rdi,%rax
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x1(%rdi),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x2(%rax),%ecx
  mov    %dl,(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x3(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x4(%rax),%ecx
  mov    %dl,0x1(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x5(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x6(%rax),%ecx
  mov    %dl,0x2(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x7(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x8(%rax),%ecx
  mov    %dl,0x3(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x9(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0xa(%rax),%ecx
  mov    %dl,0x4(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0xb(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0xc(%rax),%ecx
  mov    %dl,0x5(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0xd(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0xe(%rax),%ecx
  mov    %dl,0x6(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0xf(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x10(%rax),%ecx
  mov    %dl,0x7(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x11(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x12(%rax),%ecx
  mov    %dl,0x8(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x13(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x14(%rax),%ecx
  mov    %dl,0x9(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x15(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  mov    %dl,0xa(%rax)
  movzbl 0x16(%rax),%ecx
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x17(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x18(%rax),%ecx
  mov    %dl,0xb(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x19(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x1a(%rax),%ecx
  mov    %dl,0xc(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x1b(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x1c(%rax),%ecx
  mov    %dl,0xd(%rax)
  mov    %ecx,%esi
  lea    -0x57(%rcx),%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x60,%cl
  cmovbe %esi,%edx
  movzbl 0x1d(%rax),%esi
  cmp    $0x60,%sil
  lea    -0x30(%rsi),%edi
  lea    -0x57(%rsi),%ecx
  cmovbe %edi,%ecx
  add    %ecx,%edx
  movzbl 0x1e(%rax),%ecx
  mov    %dl,0xe(%rax)
  lea    -0x57(%rcx),%esi
  mov    %ecx,%edx
  shl    $0x4,%esi
  shl    $0x4,%edx
  cmp    $0x61,%cl
  cmovae %esi,%edx
  movzbl 0x1f(%rax),%esi
  cmp    $0x61,%sil
  lea    -0x57(%rsi),%edi
  lea    -0x30(%rsi),%ecx
  cmovae %edi,%ecx
  add    %ecx,%edx
  mov    %dl,0xf(%rax)
  ret
```

assistant: ```c
void hextoi_md5(unsigned char p_crc[16 * 2]) {
  int i = 0;
  for (; i < 16; i++) {
    p_crc[i] = (((p_crc[i * 2]) - 'a' + 1) > 0 ? ((p_crc[i * 2]) - 'a' + 10) : ((p_crc[i * 2]) - '0')) * 16 + (((p_crc[i * 2 + 1]) - 'a' + 1) > 0 ? ((p_crc[i * 2 + 1]) - 'a' + 10) : ((p_crc[i * 2 + 1]) - '0'));
  }
}
```