字节设置无符号短

Bog*_*Wei 4 c++ memset

我正在尝试使用memset以下方法单独设置无符号短变量中的字节:

#include <cstring>
#include <iostream>

int main()
{
  unsigned short test2; // 2 bytes

  std::cout << "size of test2: " << sizeof(test2) << std::endl;

  memset(&test2, 0, 2); 
  memset(&test2, 0x4D, 1);                                                               
  memset(&test2+1, 0x42, 1); 

  std::cout << "value: " << test2 << std::endl;

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

我得到的输出是:

size of test2: 2
value: 77
Run Code Online (Sandbox Code Playgroud)

77是0x4D.所以由于某种原因,它没有拿起我试图在变量的第二个字节上设置的0x42.这是为什么?

Mik*_*CAT 6

&test2+1实际上将使地址前进sizeof(test2),即2,并将指针移动到超出范围.

尝试使用强制转换为char*:

#include <cstring>
#include <iostream>

int main()
{
  unsigned short test2; // 2 bytes

  std::cout << "size of test2: " << sizeof(test2) << std::endl;

  memset(&test2, 0, 2); 
  memset(&test2, 0x4D, 1);                                                               
  memset((char*)&test2+1, 0x42, 1); 

  std::cout << "value: " << test2 << std::endl;

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