簡體   English   中英

將uint16_t分配給std :: vector索引的行為<uint8_t>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM