Setting a buffer of char* with intermediate casting to int*

前端 未结 6 483
一向
一向 2021-01-11 17:23

I could not fully understand the consequences of what I read here: Casting an int pointer to a char ptr and vice versa

In short, would this work?

set         


        
6条回答
  •  孤街浪徒
    2021-01-11 17:46

    Use reinterpret_cast<>() if you want to ensure the underlying data does not "change shape".

    As Learner has mentioned, when you store data in machine memory endianess becomes a factor. If you know how the data is stored correctly in memory (correct endianess) and you are specifically testing its layout as an alternate representation, then you would want to use reinterpret_cast<>() to test that memory, as a specific type, without modifying the original storage.

    Below, I've modified your example to use reinterpret_cast<>():

    void set4Bytes(unsigned char* buffer) {
      const uint32_t MASK = 0xffffffff;
      if (*reinterpret_cast(buffer) % 4) {//misaligned
         for (int i = 0; i < 4; i++) {
           buffer[i] = 0xff;
         } 
      } else {//4-byte alignment
        *reinterpret_cast(buffer) = MASK;
      }
    }
    

    It should also be noted, your function appears to set the buffer (32-bytes of contiguous memory) to 0xFFFFFFFF, regardless of which branch it takes.

提交回复
热议问题