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]);
このようなメモリの一部を別のポインター型にキャストして再解釈すると、未定義の動作が発生することを発見したばかりです。それでも、上記の例はすべて実行することを意図しており、絶対に必要です。それらを行う正しい方法は何ですか?