将 amqp_cstring_bytes 转换回 C 字符串
Converting amqp_cstring_bytes back to C string
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;
}
另外,看看 rabbitmq-c 的 void amqp_dump(void const *buffer, size_t len);
函数。
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;
}
另外,看看 rabbitmq-c 的 void amqp_dump(void const *buffer, size_t len);
函数。