将 amqp_cstring_bytes 转换回 C 字符串

标签 c rabbitmq amqp rabbitmq-c

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

最佳答案

您可以使用 (char *) <amqp_bytes_t bytes>.bytes或更高级的功能 like this (只需将 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 的函数。

关于将 amqp_cstring_bytes 转换回 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36430875/

相关文章:

c - 内存和静态/共享库中的程序位置

c - C 中的内存泄漏?

python - 使用不同的交换类型动态创建队列

python - 如何连接到rabbitMQ docker容器?

RabbitMQ - 按优先级使用多个队列

java - 如何使用 qpid-config.json 设置带有队列的 Qpid

c - 个人使用程序的 MISRA-C 编码指南?

c - 何时在 C 函数中使用 const

c - 如何检查消息是否传递到任何单个队列

go - 从 golang 使用 AMQP 1.0 连接到 IBM MQ 时出现 EOF