3 ms·
> fwrite() dump floats to binaries That requires a cast from float* to void*. Reading the floating point number as an integer is not necessary.
by pif 3y ago
> fwrite() dump floats to binaries
That requires a cast from float* to void*. Reading the floating point number as an integer is not necessary.
- yvdriess 3y agoAFAIK the underlying mechanism and undefined behaviour is the same.
- pif 3y agoNo, it isn't! Casting any object pointer to (and from) void* or char* is guaranteed to work, while float to integer incurs in the undefined behaviour curse.
- yvdriess 3y agoDo I understand you right that for (int i=0; i<4; i++) buf[i] = ((char*)&my_float)[i]; is not undefined behavior? But that for (int i=0; i<4; i++) buf[i] = ((char*)(int32_t*)&my_float)[i]; is undefined?
- pif 3y agoI'm not sure 100%, but your second example does not imply UB. UB is caused by the act of accessing an object via a pointer of the wrong type, but just casting a pointer as you do should not be a problem. On the other side, this would incur UB: int32_t my_int = *((int32_t*)&my_float);