memcpy是否识别目标的基础大小?

Val*_*tin 1 c++ bit-manipulation

#include <iostream>
#include <bitset>
#include <cstring>

using namespace std;

int main()
{
    uint8_t a = 1;
    uint16_t b = 0;

    memcpy(&b, &a, 1);

    cout << bitset<16>(b) << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个的输出是0000000000000001.但是,我会想到memcpy把刚才复制a到的第一个字节b,并b0000000100000000代替.这里发生了什么?

dbu*_*ush 8

memcpyvoid *为每个参数取一个a ,因此它没有关于底层变量类型的信息.它完全复制指定的字节数.

你看到的原因0x0001,而不是0x0100可能是因为你的系统使用little endian字节顺序,这意味着至少显著字节是第一位的.