很久以前,我已经记不清我在 C 中做过多少次这样的事情了:
struct foo f;
struct foo* pf = &f;
char* pc = (char*) pf;
transmit(pc, sizeof(f));
也许:
char* buffer[1024];
receive(buffer, 1024);
float values[256];
for(int ii = 0; ii < 256; ii++) {
float* pf = (float*)(buffer + ii*4);
values[ii] = *pf;
}
或者可能:
uint32_t ipAddress = ...;
uint8_t* p = (uint8_t*)&ipAddress;
uint8_t octets[4] = {p[0], p[1], p[2], p[3]};
printf("%d.%d.%d.%d\n", octets[0], octets[1], octets[2], octets[3]);
我刚刚发现通过转换为另一种指针类型来重新解释这样的一段内存会调用未定义的行为。然而,上面所有的例子都是绝对必要的。做它们的正确方法是什么?