使用zframe_strdup时没有输出字符串

时间:2013-09-11 17:06:42

标签: zeromq

我想创建一个哈希表,用于存储发件人的身份作为密钥。为了执行一些初步检查,我在一些现有代码中添加了以下行:

zframe_print(sender,"Sender frame print:");
char *string = zframe_strdup(sender);
zclock_log("Sender frame string:%s", string);

Output:
Sender frame print:[005] 006B8B4571
Sender frame string:

我不明白为什么在使用 zframe_strdup 时没有输出。有什么想法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

我不明白为什么使用zframe_strdup时没有输出。

zframe_print输出告诉您所需的一切。您的帧长5个字节,包含字节00 6B 8B 45 71。

如果帧内容是可打印文本,则zframe_strdup非常有用,但这不是这种情况。标识帧是5个字节,没有文本含义。我建议您只需从代码中删除第2行和第3行。

当您尝试在zclock_log语句中打印二进制数据时,它期望%s字符串参数为以空字符结尾的字符串。巧合的是,按照惯例,zeromq生成的标识帧的第一个字节始终为0.因为第一个字节为零,所以zclock_log将第一个字节解释为字符串的结尾,并且没有输出。

[更新]

  

我想创建一个哈希表,它将发件人的身份存储为密钥

我认为你使用zframe_strhex走在正确的轨道上。十六进制编码的字符串将为您的表格创建一个很好的键。是的,你最终必须转换回二进制,但这是一个定义明确的问题,你可以进行单元测试,而StackOverflow中有很多关于这个主题的问题/答案。