0

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

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时没有输出。有任何想法吗?

谢谢您的帮助。

4

1 回答 1

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 中有很多关于此主题的问题/答案。

于 2013-09-11T20:24:54.367 回答