我有一个结构体:
//Custom packet structure.
struct UserPacket
{
__int64 pingTime;
} CustomPacket;
我已经知道如何将它转换为char*。现在我想将char*转换回结构体。有什么建议吗?
我有一个结构体:
//Custom packet structure.
struct UserPacket
{
__int64 pingTime;
} CustomPacket;
我已经知道如何将它转换为char*。现在我想将char*转换回结构体。有什么建议吗?
如果是C++:
char* theCharPtr; // has your converted data
UserPacket* fromChar = reinterpret_cast<UserPacket*>(theCharPtr);
[[un]signed] char *
转换为SomethingElse *
在标准中并不被官方认可。严格的别名规则只允许SomethingElse *
转换为char *
。当然,大多数实现确实允许这样做,并且会做大多数人所期望的事情,顺便说一句,我有时也会利用这一点,但始终要明确警告它并不能保证行为一致。特别是在某些实现中,可能会导致结果SomethingElse
包含一个基本类型成员,现在错位了,从而使程序在运行时崩溃。 - underscore_dchar*
转换为SomethingElse*
的强制转换? - Nubcakeunion
来避免这种情况,但在C++中,您不能。请参见:将char数组强制转换为struct类型 虽然如此,从C++20左右(文件正在准备中),终于允许通过reinterpret_cast
从原始字节的内存中“创建”一个合适的仅数据对象。目前我们必须使用memcpy()
或类似方法来解决现有标准语言的问题。 - underscore_d将其强制类型转换。以下是一些示例(其中两个使用类型转换)。
CustomPacket customPacket;
char * p = (char *) &customPacket;
CustomPacket * pPacket = (CustomPacket *) p;
CustomPacket * pAlternate = &customPacket;