#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;
}
此输出为0000000000000001
。但是,我希望memcpy
只将a
复制到b
的第一个字节,而将b
复制为0000000100000000
。这里发生了什么?
答案 0 :(得分:8)
memcpy
为每个参数获取void *
,因此它没有关于底层变量类型的信息。它完全复制指定的字节数。
您看到0x0001
而不是0x0100
的原因可能是因为您的系统使用小端字节排序,这意味着最低有效字节首先出现。
答案 1 :(得分:0)
不,memcpy
对缓冲区的大小一无所知,这就是原因
你必须传递你想要复制的字节数。是否缓冲区
足够大,不是memcpy
关注的问题。
您只复制 1 字节,只会在b
中复制最低有效字节,
这就是你看到0000000000000001
。