【发布时间】:2014-06-14 08:33:21
【问题描述】:
示例代码:
#include <iostream>
#include <string>
#include <string.h>
#include <cstdio>
int main(int argc, char ** argv)
{
std::string mystring = "5448495320574f4e5420574f524b";
std::cout << mystring << std::endl;
char buffer[mystring.size()];
memset(buffer, '\0', mystring.size());
mystring.copy(buffer, mystring.size(), 0);
for (int i = 0; i < mystring.size(); i++)
{
printf("%X", buffer[i]);
}
printf("\n");
}
输出:
5448495320574f4e5420574f524b
35343438343935333230353734663465353432303537346635323462
问题:
我的字符串包含以十六进制表示的“THIS WONT WORK”。我想将字符串 as hex 的内容复制到字符缓冲区中,这样当我通过套接字发送 544849... 时,它会在另一侧接收到该内容,而不是“35343438 ...”。
我已尝试使用其他帖子中建议的 stringstream 和 std::hex,但这不起作用。
编辑
抱歉,这里有更多信息。如果它仍然是重复的,我会关闭它。 mystring 中的数据就是一个例子。我实际得到的数据是在“内容”中通过 AMQP 发送的数据结构。 getContent() 返回一个 std::string,就像 getContentBytes() 一样。
字符串的前两个字节是 54。但是,当我将其写入套接字时,另一台服务器将前两个字节读取为 35,并使消息无效。
【问题讨论】:
-
我建议不要使用裸数组,而是使用
std::vector或std::array。 -
答案是正确的,因为 printf 不正确,但这让我想知道为什么您认为通过套接字发送数据存在问题。我不希望通过套接字发送数据时会发生相同类型的错误,所以我很困惑。