![](/img/trans.png)
[英]How to cast, in C++, a byte vector (std::vector<uint8_t>) into different uint32_t, uint16_t and uint8_t variables
[英]Behavior of assigning uint16_t to an index of std::vector<uint8_t>
std::vector<uint8_t> v(4);
uint16_t cafe = 0xCAFE;
uint16_t babe = 0xBABE;
v[0] = cafe;
v[2] = babe;
我要的行为将导致:
v[0] == 0xCA
v[1] == 0xFE
v[2] == 0xBA
v[3] == 0xBE
但是我得到了:
v[0] == 0xFE
v[1] == 0x00
v[2] == 0xBE
v[3] == 0x00
我应该怎么做才能得到想要的结果?
您的代码不起作用的原因是c ++将值转换为uint8_t
,即向量所持有的类型:
v[0] = (uint8_t)cafe; // conceptually
要么
v[0] = (uint8_t)(cafe & 0xff); // conceptually
以下将执行您想要的操作:
v[0] = (uint8_t)((cafe >> 8) & 0xff);
v[1] = (uint8_t)((cafe >> 0) & 0xff);
v[2] = (uint8_t)((babe >> 8) & 0xff);
v[3] = (uint8_t)((babe >> 0) & 0xff);
如果您使用的是大端机,则不要介意代码不可移植,并希望进行一些极端的性能优化,请执行以下操作:
*(uint16_t)&v[0] = cafe;
*(uint16_t)&v[2] = babe;
如果要使这四个元素具有这四个值,请将这四个元素设置为那些值。 除了为什么您期望其他工作方式之外,这里没有什么神秘的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.