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