设置char*的缓冲区,中间转换为int*

Ant*_*nio 10 c c++ memory pointers

我无法完全理解我在这里阅读的内容的后果:将一个int指针转换为char ptr,反之亦然

总之,这会有用吗?

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

}
Run Code Online (Sandbox Code Playgroud)

编辑
有一个长时间的讨论(它是在评论中,神秘地删除了)关于指针应该被铸造到什么类型以检查对齐.现在讨论这个问题.

Hem*_*war 11

如果要在所有4个字节中填充相同的值,则此转换是安全的.如果byte order问题那么这种转换是不安全的.因为当你使用整数一次填充4个字节时它会填充4 Bytes但顺序取决于字节顺序.