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

```asm
<escape_char_process>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r11
  mov    %edx,%edi
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  lea    0x1(%rdx),%eax
  cltq
  add    $0xf,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffffff0,%rcx
  and    $0xfffffffffffff000,%rax
  mov    %rsp,%rdx
  sub    %rax,%rdx
L33:
  cmp    %rdx,%rsp
  je     L205
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L33
L205:
  mov    %rcx,%rax
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L9
  orq    $0x0,-0x8(%rsp,%rax,1)
L9:
  mov    %rsp,%r9
  mov    $0x1,%eax
  mov    $0x0,%edx
  lea    D3(%rip),%rbx
  mov    $0x1e,%r15d
  mov    $0x1d,%r14d
  mov    $0x1b,%r13d
  mov    $0xd,%r12d
  jmp    L200
  add    $0x2,%edx
  mov    $0x0,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0x4,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0x7,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0x8,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0x9,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0xa,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0xb,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    $0xc,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    %r12d,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    %r13d,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    %r14d,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    %r15d,%ecx
  jmp    L183
  add    $0x2,%edx
  mov    %r10d,%ecx
  jmp    L183
L37:
  add    $0x1,%edx
  jmp    L183
L186:
  add    $0x1,%edx
L183:
  mov    %cl,-0x1(%r9,%rax,1)
  mov    %eax,%ecx
  add    $0x1,%rax
  cmp    %edi,%edx
  jge    L132
L200:
  movslq %edx,%r8
  movzbl (%rsi,%r8,1),%ecx
  cmp    $0x5c,%cl
  jne    L186
  movzbl 0x1(%rsi,%r8,1),%r10d
  lea    -0x30(%r10),%r8d
  cmp    $0x46,%r8b
  ja     L37
  movzbl %r8b,%r8d
  movslq (%rbx,%r8,4),%r8
  add    %rbx,%r8
  notrack jmp *%r8
L132:
  movslq %ecx,%rax
  movb   $0x0,(%r9,%rax,1)
  mov    %ecx,%edx
  mov    %r9,%rsi
  mov    %r11,%rdi
  call   <ZBarcode_Encode@plt>
  mov    -0x38(%rbp),%rdx
  sub    %fs:0x28,%rdx
  jne    L98
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L98:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int escape_char_process(struct zint_symbol *my_symbol, unsigned char input_string[], int length) {
  int error_number;
  int i, j;
  unsigned char escaped_string[length + 1];
  i = 0;
  j = 0;
  do {
    if (input_string[i] == '\\') {
      switch (input_string[i + 1]) {
      case '0':
        escaped_string[j] = 0x00;
        i += 2;
        break;
      case 'E':
        escaped_string[j] = 0x04;
        i += 2;
        break;
      case 'a':
        escaped_string[j] = 0x07;
        i += 2;
        break;
      case 'b':
        escaped_string[j] = 0x08;
        i += 2;
        break;
      case 't':
        escaped_string[j] = 0x09;
        i += 2;
        break;
      case 'n':
        escaped_string[j] = 0x0a;
        i += 2;
        break;
      case 'v':
        escaped_string[j] = 0x0b;
        i += 2;
        break;
      case 'f':
        escaped_string[j] = 0x0c;
        i += 2;
        break;
      case 'r':
        escaped_string[j] = 0x0d;
        i += 2;
        break;
      case 'e':
        escaped_string[j] = 0x1b;
        i += 2;
        break;
      case 'G':
        escaped_string[j] = 0x1d;
        i += 2;
        break;
      case 'R':
        escaped_string[j] = 0x1e;
        i += 2;
        break;
      case '\\':
        escaped_string[j] = '\\';
        i += 2;
        break;
      default:
        escaped_string[j] = input_string[i];
        i++;
        break;
      }
    } else {
      escaped_string[j] = input_string[i];
      i++;
    }
    j++;
  } while (i < length);
  escaped_string[j] = '\0';
  error_number = ZBarcode_Encode(my_symbol, escaped_string, j);
  return error_number;
}
```