1

C 的 AMQP 消息传递库有一个函数,它接受一个 C 字符串并将其转换为它自己的字节格式以进行处理amqp_cstring_bytes。是否有这个函数的逆函数来获取它的字节格式并将其转换回 C 字符串?

4

1 回答 1

2

您可以像这样(char *) <amqp_bytes_t bytes>.bytes使用或更高级的功能(只需将特定于 php 的功能替换为以下代码中的类似功能):emalloc()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-c 的功能。

于 2016-04-05T16:05:44.887 回答