该标准确实说即使在standard-layout-struct内部(但不是在开头)也可能存在填充,因此二进制副本可能不可移植。但是,给定特定的系统和打包说明(查找#pragma pack
),您可能只能使用memcpy
.
您可以尝试以下方法:
#include <cstring>
#include <algorithm>
#include <iterator>
#include <iostream>
// look up your compiler's documentation
//#pragma pack(4)
struct fs {
float x, y, z;
};
int main() {
fs b = {1.0, 2.0, 3.0};
float p[ 4 ] = {0};
static_assert( sizeof b == sizeof p - 1, "warning: padding detected!" );
std::memcpy(&p[ 0 ], &b, sizeof p - 1);
std::copy(&p[ 0 ], &p[ 0 ] + 3, std::ostream_iterator<float>(std::cout, "\n"));
}