我有一個字節數組,聲明像這樣:C++矢量數據訪問
typedef unsigned char byte;
vector<byte> myBytes = {255, 0 , 76 ...} //individual bytes no larger in value than 255
我是我需要訪問向量的原始數據(當然沒有任何複製)的問題, 但我需要分配任意數量的位給指向元素的任何給定指針。
換句話說,我需要將一個unsigned int
分配給向量中的某個位置。
因此,考慮上面的例子,我希望做類似如下:
myBytes[0] = static_cast<unsigned int>(76535); //assign n-bit (here 32-bit) value to any index in the vector
使矢量數據現在看起來像:
{2, 247, 42, 1} //raw representation of a 32-bit int (76535)
這可能嗎?我需要使用一個向量,並且只是想知道原始數據是否可以用這種方式訪問,或者向量存儲原始數據如何使這個不可能或更糟 - 不安全?
在此先感謝!
編輯
我不想增加複雜性,但我構建不同大小的整數如下:
//**N_TYPES
u16& VMTypes::u8sto16(u8& first, u8& last) {
return *new u16((first << 8) | last & 0xffff);
}
u8* VMTypes::u16to8s(u16& orig) {
u8 first = (u8)orig;
u8 last = (u8)(orig >> 8);
return new u8[2]{ first, last };
}
有什麼可怕的這件事,是我不知道的生成的數字的字節序。但是我知道我正在構建和破壞它們(我正在編寫一個堆棧機器),所以如果我沒有弄錯,排序不會受到我正在嘗試做的事情的影響。
EDIT 2
我構建整數在以下可怕方式:
u32 a = 76535;
u16* b = VMTypes::u32to16s(a);
u8 aa[4] = { VMTypes::u16to8s(b[0])[0], VMTypes::u16to8s(b[0])[1], VMTypes::u16to8s(b[1])[0], VMTypes::u16to8s(b[1])[1] };
難道這再正常工作?:
memcpy(&_stack[0], aa, sizeof(u32));
另外不要忘記觀看未對齊的訪問。 –
@LogicStuff是的,但你的評論是無益的。 SuperCookie,new用於動態內存分配並返回一個指針;更好地讓矢量爲你管理內存。 – Straw1239
這裏的重點是如果你的系統是小端或大端。根據你的系統,字節的順序應該顛倒過來。 – mustafagonul