这可能吗?我想将其转换为char*,以便稍后检索此值.
当然:
int array[4] = {1, 2, 3, 4}; char* c = reinterpret_cast(array);
有效范围是从.c
到c + sizeof(array)
.您可以对任何POD类型执行此操作.
您可以从一系列字节转回:
// assuming c above int (&pArray)[4] = *reinterpret_cast(c);
这保证有效.但是,似乎你正在尝试通过网络发送内容,这可能会引入其他问题
您正在寻找的过程称为序列化(并有一个FAQ条目).这是当您获取一个对象时,将其转换为一系列位,以后可以将其"反序列化"到原始对象中.
在多个平台上完成这项工作可能很棘手,因为您需要确保序列化为特定格式,并且每个平台都知道它应该如何从该格式读取.(例如,big-endian平台在发送之前可能总是转换为little-endian,并且在接收时也会转换回big-endian.)你不能将非POD类型视为字节流(例如std::string
),所以你需要为这些函数编写序列化函数,将其数据转换为字节流,并使用反序列化函数将其转换回来.
我特别喜欢Boost这样做的方式,如果可以,我可以使用他们的序列化库.它们基本上首先定义用于序列化基本类型的例程,然后通过构建它来序列化更复杂的类型.当然,Boost也有他们的ASIO库为你做套接字.