这可能吗?我想将其转换为 char* 以便稍后检索该值。
Sure:
int array[4] = {1, 2, 3, 4};
char* c = reinterpret_cast<char*>(array);
有效范围是从c
to c + sizeof(array)
。您可以对任何 POD 类型执行此操作。
您可以从字节序列中强制转换:
// assuming c above
int (&pArray)[4] = *reinterpret_cast<int(*)[4]>(c);
这是有保证的。但是,您似乎正在尝试通过网络发送内容,这可能会带来其他问题
您正在寻找的进程称为序列化(并且有一个常见问题解答入口 http://www.parashift.com/c++-faq-lite/serialization.html)。这是当您获取一个对象时,将其转换为一系列位,稍后可以将其“反序列化”为原始对象。
跨多个平台进行这项工作可能很棘手,因为您需要确保序列化为特定格式,并且每个平台都知道应该如何从该格式读取。 (例如,大端平台可能总是在发送之前转换为小端,同样在接收时转换回大端。)您不能将非 POD 类型视为字节流(例如std::string
),因此您需要为它们编写序列化函数,将其数据转换为字节流,并编写反序列化函数将其转换回来。
我特别喜欢 Boost 这样做的方式,如果可以的话我会使用他们的序列化库 http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/index.html。它们基本上首先定义用于序列化基本类型的例程,然后您可以通过构建它来序列化更复杂的类型。当然,Boost也有他们的ASIO库 http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html为你做套接字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)