我需要执行的操作要求我从char数组中获取一个int32_t值和2个int64_t值
char数组的前4个字节包含int32值,接下来的8个字节包含第一个int64_t值,接下来的8个字节包含第二个字节.我无法弄清楚如何获得这些价值观.我试过了;
int32_t firstValue = (int32_t)charArray[0];
int64_t firstValue = (int64_t)charArray[1];
int64_t firstValue = (int64_t)charArray[3];
int32_t *firstArray = reinterpet_cast<int32_t*>(charArray);
int32_t num = firstArray[0];
int64_t *secondArray = reinterpet_cast<int64_t*>(charArray);
int64_t secondNum = secondArray[0];
Run Code Online (Sandbox Code Playgroud)
我只是抓住稻草.任何帮助赞赏
快速而肮脏的解决方案:
int32_t value1 = *(int32_t*)(charArray + 0);
int64_t value2 = *(int64_t*)(charArray + 4);
int64_t value3 = *(int64_t*)(charArray + 12);
Run Code Online (Sandbox Code Playgroud)
请注意,这可能会导致未对齐的内存访问。因此,它可能并不总是有效。
一个更强大的解决方案,不违反严格混叠并且不会出现对齐问题:
int32_t value1;
int64_t value2;
int64_t value3;
memcpy(&value1,charArray + 0,sizeof(int32_t));
memcpy(&value2,charArray + 4,sizeof(int64_t));
memcpy(&value3,charArray + 12,sizeof(int64_t));
Run Code Online (Sandbox Code Playgroud)