2016-04-05 4 views
1

Библиотека сообщений AMQP для C имеет функцию, которая принимает строку C и преобразует ее в собственный формат байта для обработки amqp_cstring_bytes. Есть ли обратная функция этой функции, чтобы принять его формат байта и преобразовать его обратно в строку C?Преобразование amqp_cstring_bytes обратно в строку C

ответ

2

Вы можете использовать (char *) <amqp_bytes_t bytes>.bytes или более продвинутые функции like this (просто заменить emalloc() который PHP специфический с malloc() как в коде ниже):

char *stringify_bytes(amqp_bytes_t bytes) 
{ 
/* We will need up to 4 chars per byte, plus the terminating 0 */ 
    char *res = malloc(bytes.len * 4 + 1); 
    uint8_t *data = bytes.bytes; 
    char *p = res; 
    size_t i; 

    for (i = 0; i < bytes.len; i++) { 
     if (data[i] >= 32 && data[i] != 127) { 
      *p++ = data[i]; 
     } else { 
      *p++ = '\\'; 
      *p++ = '0' + (data[i] >> 6); 
      *p++ = '0' + (data[i] >> 3 & 0x7); 
      *p++ = '0' + (data[i] & 0x7); 
     } 
    } 

    *p = 0; 
    return res; 
} 

Кроме того, взглянуть на void amqp_dump(void const *buffer, size_t len); функции от RabbitMQ-с.

+0

'(char *) .bytes' действительно работал отлично. Спасибо. – Shiri

 Смежные вопросы

  • Нет связанных вопросов^_^